2016-12-04 8 views
0

Я хочу умножить две матрицы. A * B отлично работает. Но я действительно хочу A.t * B. Но после транспонирования A результат становится Transpose [Матрица [Двойной]] вместо Matrix [Double]. В результате операция отклоняется компилятором. Однако, математически, транспонирование матрицы - это еще одна матрица, и должно быть совершенно нормально умножить ее на другую матрицу. Как это делается на ветру?scala breeze multiply matrix by transpose

ответ

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] '? Я попробовал 'At' (где' A' имеет тип времени компиляции 'DenseMatrix [Double]'), и результатом был другой 'DenseMatrix [Double]', тогда как, если 'A' имеет тип времени компиляции' Matrix [Double] ', то' At' приводит к 'Tranpose [Matrix [Double]]'. –