2012-04-12 25 views
1

多くの行列計算を使用するJavaプログラムを作成しています。計算の際に、計算の前に複数の一時的な「記憶域」行列を使用しています。私は、このような二次元配列の初期化と使用

private double[][] intermediateMatrixA; private double[][] intermediateMatrixB; private double[][] intermediateMatrixC; private double[][] intermediateMatrixD;

とクラス変数の一時的な行列を宣言した

はしかし、私はintermediateMatrix = new double[][]の形でコンストラクタやメソッドに行列を初期化したことがありません。 代わりに私は各一時的な行列のためにこれをしていますintermediateMatrix = [the product of a matrix calculation]

私の質問:私は安全なバーリングを使用しているのですか?テンポラリアレイは他の計算で再利用されることを念頭に置いていますか?私の一時行列の1つが別の配列と等しくなければならないと宣言するたびに、その行列の正確な次元と値に等しいでしょうか?事前に

おかげ よろしく マイク

+0

これがどのように機能するかはわかりません。コードを投稿すれば、私はより確かなことができます。しかし、これは私があなたに言うことです:あなたは何かから何かを得ることはできません。行列を乗算する場合は、新しい値を格納するために新しいdouble [] []を作成する必要があります。 – ControlAltDel

+0

そして、私はJAMAマトリックスパッケージのためにgoogleとgoogleをお勧めします。行列の数学は、あなた自身のライブラリを書くことなく、十分です。 – ControlAltDel

答えて

0

はい、上からあなたの変数は、あなたの方法や計算の結果をポイントすると、行と列が保持されるようにします。方法で、「安全」であります

private double[][] intermediateMatrixA = new double[3][4]; 
//etc etc 
intermediateMatrixA =new double[5][6]; 

いつもdouble[][]であれば問題ありません。行と列を追跡するロジックは、あなた次第です。

あなたはdouble[][]、他のタイプにdouble[][]の種類を割り当てることではなく、double[]double[][]することができます。

何度も何度も使用する予定がある場合は、割り当ての前にそれらをnullに設定することをお勧めします。

関連する問題