このCompRowMatrix
クラスは実際には行ベクトルとして使用することを意図したものではなく、行ごとに行列要素を簡単に反復処理できるような方法で疎行列を表すために使用されます。
CompRowMatrix
最初の行以外のすべての行をゼロに設定することでベクトルとして使用することは可能ですが、これはプログラマーとしてより複雑であり、他の行が潜在的に非ゼロになる可能性があると想定しなければならないコードにとっては効率的ではありません。
代わりに、DenseVector
オブジェクトを使用して行ベクトルを保持し、インターフェイスからmultメソッドを使用しMatrix
ます。引数として2 つのオブジェクトを受け取りVector
、ベクトル行列の積を生成します。このメソッドは、次の引数で乗算されている行列オブジェクトで呼び出されます。
- 最初の引数、
x
は、行列で乗算するベクトルです
- 2 番目の引数 ,
y
は、乗算の結果を保持します
したがって、ベクトルと行列の積y = x*A
(x
とy
は1
xn
行ベクトルで、A
はn
xn
行列) を生成するには、次のようにします。
// create matrix A
double[][] matValues = new double[n][n];
... // initialize values of the matrix
Matrix A = new DenseMatrix(matValues);
// create vector x
double[] vecValues = new double[n];
... // initialize values of the vector
Vector x = new DenseVector(vecValues);
// create vector y to store result of multiplication
Vector y = new DenseVector(n);
// perform multiplication
A.mult(x, y);
y
これで、必要に応じてコードの残りの部分で使用できます。y
乗算の前に割り当てることは重要ですが、保持するデータは関係ありません。このmult
メソッドは、終了時に内容を上書きy
します。
x
また、私が選択した初期化方法だけが使用可能な方法ではなかったことにも注意してくださいA
。たとえば、上記のコードは、対応するandオブジェクトを作成するときに、配列vecValues
および を自動的にディープ コピーします。他の目的で配列を使用する予定がない場合は、おそらくこのディープ コピーを実行しないでください。これを行うには、コンストラクターで false に設定された追加のブール値パラメーターを渡します。matValues
Vector
Matrix
// create matrix A without deep copying matValues
Matrix A = new DenseMatrix(matValues, false);
より多くのコンストラクターオプションについては、あなたと私が以前にリンクした javadoc を参照する必要があります。ただし、javadoc は MTJ の現在のリリース (この記事の時点ではバージョン 1.01) とは異なるバージョン用であることに注意してください。それがどのバージョンに対応しているかはわかりませんし、現在のバージョンの javadoc を見つけることもできませんでしたが、現在のソース コードとの違いをいくつか見つけました。