使用Colt的逐元素稀疏矩阵乘法

时间:2012-09-13 09:43:51

标签: java matrix sparse-matrix colt

我在这里做错了什么?我想使用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,以这种方式逐个乘以两个向量的元素总是产生正确的结果。

1 个答案:

答案 0 :(得分:2)

“assign”会改变对象,因此您可能已经使用了两次 例如。请使用带有Scala REPL的Parallel Colt 0.10.0查看以下代码。

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的其他版本中的错误。