2017-02-15 2 views
2

私はMatlabの中で、1つの行列の副選択を他の行列にコピーするコードを持っています。すなわち、ijの間の行のスライスをコピーします。MatlabからSaddleへの移行:マトリックス選択を突き詰めるには?

は、私が Scala Saddleを使用して同じことをしたいと思います
% matrices 
matrix1(i:j,:) = matrix2(i:j,:) 

は私がしようとし :

// 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 

ベクトルsubselectionsを使用してではなく、インデックスを使用して行列を反復処理これを行う方法はありますか?

答えて

1

OK私は特定のユースケースのための方法を見つけましたが、一般化するには問題はないと思います。まず第一に、Saddle's Matのインスタンスは不変です。したがって、別のアプローチが必要です。第2に、rowSliceMatのためにコンパイルされますが、有効なインデックスを持つと予想される例外を常にスローします。つまり、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 
関連する問題