>> A = sparse([1,2,3,4,5])
A =
(1,1) 1
(1,2) 2
(1,3) 3
(1,4) 4
(1,5) 5
>> B = sparse([1;2;3;4;5])
B =
(1,1) 1
(2,1) 2
(3,1) 3
(4,1) 4
(5,1) 5
>> bsxfun(@times, A, B)
ans =
(1,1) 1
(2,1) 2
(3,1) 3
(4,1) 4
(5,1) 5
(1,2) 2
(2,2) 4
(3,2) 6
(4,2) 8
(5,2) 10
(1,3) 3
(2,3) 6
(3,3) 9
(4,3) 12
(5,3) 15
(1,4) 4
(2,4) 8
(3,4) 12
(4,4) 16
(5,4) 20
(1,5) 5
(2,5) 10
(3,5) 15
(4,5) 20
(5,5) 25
非スパース形式では次のようになります。
>> full(ans)
ans =
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
>>
編集:
これらのスパース ベクトルの行列乗算を行い、スパース配列を返したいと思います。
> class(NRowSums)
[1] "dsparseVector"
attr(,"package")
[1] "Matrix"
> class(NColSums)
[1] "dsparseVector"
attr(,"package")
[1] "Matrix"
>
NRowSums * NColSums (または、それがスカラーを返す場合は、それらを反転すると思います) データを一時的に格納するために非スパース変数を使用しません。
EDIT2:
私は現在これを持っています:
NSums = tcrossprod(as(NRowSums, "sparseMatrix"), as(NColSums, "sparseMatrix"))
これは、私がやろうとしていること、特に型キャストにとっては少し厄介なようです。また、NRowSum または NColSum のいずれかが存在するすべての要素を計算し、これら 2 つの共通部分だけを計算するのではないため、非常に非効率的です。つまり、この NSums には、元の疎行列よりも約 100 倍多くのエントリがあります。