2016-12-04 10 views
0

2つの行列を掛けたい。 A * Bはうまく動作します。しかし、私が本当に欲しいのはA.t * Bです。しかし、Aを転置した結果、Matrix [Double]ではなくTranspose [Matrix [Double]]になります。その結果、オペレーションはコンパイラによって拒否されます。しかし、数学的には、行列の転置は別の行列であり、他の行列でそれを掛けることは大丈夫です。これはどのように適切に風で行われますか?scala breeze転置行列乗算

答えて

0

A.t.asInstanceOf [DenseMatrix [Double]]はトリックを行いました。

+0

'A'が' DenseMatrix [Double] '型の場合、' A.t'は 'DenseMatrix [Double]'でなければなりません。したがって、 'A'が' DenseMatrix [Double] '型を実行していることが分かっているなら、' A'はコンパイル時に 'DenseMatix [Double]'をコンパイルすることができます。これにより、キャストなしで 'A.t * B'を行うことができます。 –

+0

AにはすでにDenseMatrix [Double]タイプがあります。それでもキャストする前にこの問題がありました。 – bhomass

+0

コンパイル時に 'DenseMatrix [Double]'型がありますか? 'A'がコンパイル時に' 'DenseMatrix [Double]' 'を持つ' At'を試してみました。その結果は別の 'DenseMatrix [Double]'でした。 'であれば、' At'は 'Tranpose [Matrix [Double]]になります。 –