java - 使用 Colt 进行逐元素稀疏矩阵乘法

标签 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,以这种方式按元素相乘两个 vector 总是会产生正确的结果。

最佳答案

“分配”会改变对象,因此您可能已经使用了它两次。
例如。请参阅以下使用 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 的不同版本中的错误。

关于java - 使用 Colt 进行逐元素稀疏矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12403513/

相关文章:

java - 是否可以在 Java 中扩展没有构造函数的类?

matlab - 在Matlab中总结每第n行

c - 在C中的二维矩阵中打印第二对角线下的元素

r - 生成随机稀疏矩阵

python-3.x - Groupby id 并在大矩阵 (3x3 mio.) 上展开(或求和)

python - 稠密矩形矩阵乘以稀疏矩阵

java - 在 Asana API 上使用 Java 进行 HTTP POST 多部分/表单数据上传文件

java - 无法创建 PoolableConnectionFactory(用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES))

Java JButton 未更新

c - 在 C 中的字符串矩阵上重新分配空间