2012-09-13 2 views
1

여기서 내가 뭘 잘못하고 있니? 콜트 (Colt)를 사용하여 요소 - 현명한 2 개의 희소 행렬을 곱하고 싶습니다. 변경콜트 (Colt)를 사용한 엘리먼트 단위의 희소 행렬 곱셈

2 x 2 matrix 
18 0 
0 0 

: 나는이를 대신 왼쪽 상단 요소로 6 매트릭스의 예상 결과의

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); 

받고 있어요

: 여기에 내가이 일을 시도하고있어 방법의 예 A에서 DenseDoubleMatrix2D로 올바른 결과가 나타납니다. B를 DenseDoubleMatrix2D로 변경해도 결과는 변경되지 않습니다. 요소 방식으로 두 벡터에이 방식으로 곱하면 항상 SparseDoubleMatrix1D 또는 DenseDoubleMatrix1D를 사용했는지 여부에 관계없이 올바른 결과가 나타납니다.

답변

2

개체를 "할당"하면 개체가 변경되므로 두 번 사용했을 수 있습니다.
예. 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 

또는 콜트를 사용중인 다른 버전의 버그 일 수 있습니다.