首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Colt的元素级稀疏矩阵乘法

基于Colt的元素级稀疏矩阵乘法
EN

Stack Overflow用户
提问于 2012-09-13 17:43:51
回答 1查看 1.4K关注 0票数 1

我在这里做错了什么?我想使用Colt逐个元素地乘以两个稀疏矩阵。下面是我如何尝试这样做的一个示例:

代码语言:javascript
复制
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的矩阵的预期结果不同,我得到的结果如下:

代码语言:javascript
复制
2 x 2 matrix
18 0
0 0

将A更改为DenseDoubleMatrix2D会产生正确的结果。将B更改为DenseDoubleMatrix2D不会更改结果。无论我使用的是SparseDoubleMatrix1D还是DenseDoubleMatrix1D,以这种方式将两个向量按元素相乘总是会产生正确的结果。

EN

回答 1

Stack Overflow用户

发布于 2012-09-22 05:43:46

"assign“会改变对象,因此您可能已经使用了两次。

例如,在Scala REPL中使用Parallel Colt 0.10.0的代码如下。

代码语言:javascript
复制
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的不同版本中的错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12403513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档