2012-09-13 79 views
1

我在這裏做錯了什麼?我想用兩個稀疏矩陣元素方式乘以Colt。下面是我如何試圖做到這一點的例子:元素明智的稀疏矩陣乘法使用柯爾特

DoubleMatrix2D A = new SparseDoubleMatrix2D(2, 2); 
A.set(0, 0, 2.0); 

DoubleMatrix2D B = new SparseDoubleMatrix2D(2, 2); 
B.set(0, 0, 3.0); 

A.assign(B, Functions.mult); 

相反與6作爲左上角元素的矩陣的預期結果,我得到這個:

2 x 2 matrix 
18 0 
0 0 

更改A到DenseDoubleMatrix2D會產生正確的結果。將B更改爲DenseDoubleMatrix2D不會改變結果。無論我使用SparseDoubleMatrix1D還是DenseDoubleMatrix1D,以這種方式單元乘以兩個矢量總是會得到正確的結果。

回答

2

「分配」突變對象,所以您可能已經使用了兩次。
例如使用Parallel Colt 0.10.0與Scala REPL參見以下代碼。

scala> import cern.colt.matrix.tdouble._ 
import cern.colt.matrix.tdouble._ 

scala> import cern.jet.math.tdouble.DoubleFunctions 
import cern.jet.math.tdouble.DoubleFunctions 

scala> val A = new SparseDoubleMatrix2D(2, 2); 
A: cern.colt.matrix.tdouble.impl.SparseDoubleMatrix2D = 
2 x 2 sparse matrix, nnz = 0 


scala> A.set(0, 0, 2.0) 

scala> val B = new SparseDoubleMatrix2D(2, 2); 
B: cern.colt.matrix.tdouble.impl.SparseDoubleMatrix2D = 
2 x 2 sparse matrix, nnz = 0 


scala> B.set(0, 0, 3.0) 

scala> A.assign(B, DoubleFunctions.mult) 
res11: cern.colt.matrix.tdouble.DoubleMatrix2D = 
2 x 2 sparse matrix, nnz = 1 
(0,0) 6.0 


scala> A.assign(B, DoubleFunctions.mult) 
res12: cern.colt.matrix.tdouble.DoubleMatrix2D = 
2 x 2 sparse matrix, nnz = 1 
(0,0) 18.0 


scala> A.assign(B, DoubleFunctions.mult) 
res13: cern.colt.matrix.tdouble.DoubleMatrix2D = 
2 x 2 sparse matrix, nnz = 1 
(0,0) 54.0 

或者,它可能是您在使用Colt的不同版本中的錯誤。