【问题标题】:Element-wise sparse-matrix multiplication using Colt使用 Colt 的逐元素稀疏矩阵乘法
【发布时间】:2012-09-13 09:43:50
【问题描述】:

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

【问题讨论】:

    标签: java matrix sparse-matrix colt


    【解决方案1】:

    “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 不同版本中的错误。

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多