Поэлементное умножение разреженных матриц с использованием Кольта

Что я здесь не так делаю? Я хочу поэлементно умножить две разреженные матрицы, используя 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 ответ

"assign" изменяет объект, поэтому вы могли использовать его дважды.
Например, смотрите следующий код, используя 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, которую вы используете.

Другие вопросы по тегам