当前位置: 首页 > 知识库问答 >
问题:

需要解决scala-breeze矩阵切片和向量索引问题

隆扬
2023-03-14

由于方法foo中的奇怪行为,我无法编写像bar这样的方法,我需要:

import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector

class Test {

    val dim = 3
    val X:DenseMatrix[Double] = DenseMatrix.rand(dim,dim)
    val u:DenseVector[Double] = DenseVector.fill(dim){1.0}

    def foo:Unit = {

        val i=0;
        val row_i:DenseVector[Double] = X(i,::).t  // OK
        val s = u(i)+u(i)                          // OK

        val j:Integer = 0
        val row_j:DenseVector[Double] = X(j,::).t  // does not compile (A)
        val a = u(j)+u(j)                          // does not compile (B)
    }
    def bar(i:Integer):Double = u(i)+u(i)          // does not compile (C)
}

有解决方法吗?提前感谢所有回复。

编译错误:

(A) 找不到参数canSlice:breeze的隐式值。linalg。支持CanSlice2[breeze.linalg.DenseMatrix[Double],整数,集合。不可变::。类型,结果]没有足够的参数用于应用方法:(隐式canSlice:breeze.linalg.support.CanSlice2[breeze.linalg.DenseMatrix[Double],Integer,collection.immutable.:.type,Result])

导致特征张量样。未指定的值参数canSlice。

(二)、(三)

找不到参数canSlice的隐式值:breeze.linalg.support.CanSlice[breeze.linalg.DenseVector[Double],整数,结果]方法应用的参数不够:(隐式canSlice:breeze.linalg.support.CanSlice[breeze.linalg.DenseVector[Double],整数,结果])结果为trait Tensorlike。未指定的值参数canSlice。

共有1个答案

岳正阳
2023-03-14

首先:将您的整数转换为Int。这将至少解决第一个编译错误。更新代码后确实会编译

import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector
import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector

class Test {

    val dim = 3
    val X:DenseMatrix[Double] = DenseMatrix.rand(dim,dim)
    val u:DenseVector[Double] = DenseVector.fill(dim){1.0}

    def foo:Unit = {

        val i=0;
        val row_i:DenseVector[Double] = X(i,::).t  // OK
        val s = u(i)+u(i)                          // OK

        val j:Int = 0
        val row_j:DenseVector[Double] = X(j,::).t  // does not compile (A)
        val a = u(j)+u(j)                          // does not compile (B)
    }
    def bar(i:Int):Double = u(i)+u(i)          // does not compile (C)
}

从repl:

// Exiting paste mode, now interpreting.

import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector
defined class Test

所以你的其他错误对我来说也消失了(scala 2.11.8)。如果您还有其他问题,请告诉我。

 类似资料:
  • 如前所述,对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引。 基本切片是 Python 中基本切片概念到 n 维的扩展。 通过将start,stop和step参数提供给内置的slice函数来构造一个 Python slice对象。 此slice对象被传递给数组来提取数组的一部分。 输出如下: [2 4 6] 在上面的例子中,ndarray对象由arang

  • 这里是MatLab新手(R2015a,MacOS10.10.5),希望能找到解决这个索引问题的方法。 我想基于一个行索引向量和一个列索引向量来更改一个大型2D矩阵的值。举一个非常简单的例子,如果我有一个3 x 2的零矩阵: 我要把A(1,1)=1,而A(2,2)=1,而A(3,1)=1,这样A现在 我想用向量来表示行和列的索引: 有没有办法做到这一点而不循环?请记住,这是一个玩具示例,需要处理非常

  • 本文向大家介绍MATLAB索引矩阵和数组,包括了MATLAB索引矩阵和数组的使用技巧和注意事项,需要的朋友参考一下 示例 MATLAB允许使用几种方法来索引(访问)矩阵和数组的元素: 下标索引-您可以在其中分别指定所需元素在矩阵每个维度中的位置。 线性索引-将矩阵视为向量,无论其尺寸如何。这意味着,您可以用一个数字指定矩阵中的每个位置。 逻辑索引-在其中使用逻辑矩阵(以及true和false值的矩

  • 本文向大家介绍numpy中索引和切片详解,包括了numpy中索引和切片详解的使用技巧和注意事项,需要的朋友参考一下 索引和切片 一维数组 一维数组很简单,基本和列表一致。 它们的区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改)。 这也意味着,如果不想更改原始数组,我们需要进行显式的复制,从而得到它的副本(.copy())。 二维数组 二维数组中,各索引位置上的元素不再

  • 主要内容:基本切片,多维数组切片在 NumPy 中,如果想要访问,或修改数组中的元素,您可以采用索引或切片的方式,比如使用从 0 开始的索引依次访问数组中的元素,这与 Python 的 list 列表是相同的。 NumPy 提供了多种类型的索引方式,常用方式有两种:基本切片与高级索引。本节重点讲解基本切片。 基本切片 NumPy 内置函数 slice() 可以用来构造切片对象,该函数需要传递三个参数值分别是 start(起始索引