2

我在 Matlab 中有以下代码,它将子选择从一个矩阵复制到另一个矩阵,即它复制和之间的行切片ij例如

 % matrices
 matrix1(i:j,:) = matrix2(i:j,:)

我想使用Scala Saddle做同样的事情,所以我尝试:

 // matrices
 val matrix1 = Mat[Double](M, N)
 val matrix2 = Mat[Double](M, N)
 // ...
 // but none of these work
 matrix2.rowSlice(i, j) = matrix2.rowSlice(i, j)
 matrix2.rowSlice(i, j).toMat.toVec = matrix2.rowSlice(i, j).toMat.toVec

有没有办法使用矢量子选择而不是使用索引迭代矩阵?

4

1 回答 1

1

好的,我为我的特定用例找到了一种方法,但我认为概括它应该没有问题。首先,Saddle 的 Mat实例是不可变的,因此它需要完全不同的方法。其次,rowSlice虽然它编译为Mat,但总是抛出一个期望有有效索引的异常,即它只适用于Frame而不是Mat,可能是鞍库的一个错误。

我的新方法是将所有切片的行收集到行matrix2序列中,然后matrix1从生成的行序列中立即构建为一个新矩阵。最后,由于Mat构造函数需要一个列序列,Vect它也必须被转置:

var RowSeq: Seq[Vec[Double]] = Seq()
RowSeq ++= matrix2.row((i1 to j1).toArray).rows()
RowSeq ++= matrix2.row((i2 to j2).toArray).rows()
RowSeq ++= matrix2.row((i3 to j3).toArray).rows()
val matrix1 = Mat(RowSeq.toArray).T
于 2017-02-15T12:47:58.547 回答