我正在Matlab中工作,我遇到了下一个问题:我有一个元素B
矩阵nx2
,其中包含用于分配大型稀疏矩阵A
(几乎500,000x80,000)的索引。对于的每一行B
,第一列是A
必须包含1的列索引,第二列是A
必须包含-1的列索引。例如:
B= 1 3
2 5
1 5
4 1
5 2
对于此B矩阵,对应的A矩阵必须像这样:
A= 1 0 -1 0 0
0 1 0 0 -1
1 0 0 0 -1
-1 0 0 1 0
0 -1 0 0 1
因此,该行i
的B
,相应行i
的A
必须是全是零,除了在A(i,B(i,1))=1
和A(i,B(i,2))=-1
通过for
遍历B的所有行,这非常容易,但是非常慢。我还尝试了下一个公式:
A(:,B(:,1))=1
A(:,B(:,2))=-1
但是matlab给我一个“内存不足错误”。如果有人知道实现此目标的更有效方法,请告诉我。
提前致谢!
您可以使用以下sparse
功能:
m = size(B,1); %// number of rows of A. Or choose larger if needed
n = max(B(:)); %// number of columns of A. Or choose larger if needed
s = size(B,1);
A = sparse(1:s, B(:,1), 1, m, n) + sparse(1:s, B(:,2), -1, m, n);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句