2016-03-08 4 views
0

Мои коды, как показано ниже:Как реализовать умножение DenseMatrix [BigDecimal] на Бриз?

val bigArrs = Array(BigDecimal(1),BigDecimal(2)) 
val dm = new DenseMatrix[BigDecimal](2,1,bigArrs) 
val cal = dm*dm.t 

, когда я скомпилировать его, я получаю следующие ошибки компиляции:

Error:(11, 15) diverging implicit expansion for type breeze.linalg.operators.OpMulMatrix. 
Impl2[breeze.linalg.DenseMatrix[BigDecimal],breeze.linalg.DenseMatrix[BigDecimal],That] 
starting with method canMulM_M_def in trait DenseMatrixOpsLowPrio 
val cal = dm*dm.t 
     ^
Error:(11, 15) not enough arguments for method *: (implicit op: breeze.linalg.operators.OpMulMatrix.Impl2 
[breeze.linalg.DenseMatrix[BigDecimal],breeze.linalg.DenseMatrix[BigDecimal],That])That. 
Unspecified value parameter op. 
val cal = dm*dm.t 
     ^

Я спрашиваю, как реализовать умножение или сложение по DenseMatrix [BigDecimal] в Бриз. Я прочитал https://github.com/scalanlp/breeze/wiki/Universal-Functions#enabling-ufuncs-for-your-collection-type и http://dlwh.org/tag/breeze/, пытаясь его решить. Однако, как новичок в Breeze и scala, мне действительно немного сложно закончить эти коды. Надеюсь, кто-то сделает мне одолжение!

ответ

0
val d = dm.*(dm.t)(DenseMatrix.op_DM_DM_Semiring[BigDecimal]) 

Это work.Any работа матрицы может сделать как this.If типа вашего возвращаемого значения нет ничего, что может быть, что вы не применять неявный параметр (как я показал во втором кронштейне) ,