我在这里做错了什么?我想使用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,以这种方式将两个向量按元素相乘总是会产生正确的结果。
发布于 2012-09-22 05:43:46
"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的不同版本中的错误。
https://stackoverflow.com/questions/12403513
复制相似问题