我在MATLAB中有一个稀疏矩阵,其维度为:8970240 x 8970240 = L x L
。我们称之为M
。
例如,给定一对索引i
和j
:M(i, j) = 1
,我必须为矩阵中的许多元素分配1的值。
我有要在矢量中执行分配的索引,这是:
V1
存储行索引(i)。V2
存储列索引(j)。现在,问题在于V1
的长度(7004160)与V2
的长度(6389760)不同。还会在我的稀疏矩阵中返回很多非零元素,总共7004160 x 6389760 = 44754901401600 = A
个非零元素。
我试图用这种方式构造M
:
M = sparse(V1, V2, ones(A), L, L)
但这不起作用...
有人知道如何解决吗?
答案 0 :(得分:1)
这可能不是最有效的方法,但是您可以通过构建包含整个索引对列表的新向量来实现。
W1 = repmat(V1,length(V2),1); %repeat whole vector
W2 = repelem(V2,length(V1)); %repeat each element so it matches with each V1 element
将W1,W2
替换为V1,V2
的M表达式
如果您不必只存储稀疏格式的M,
M = zeros(L);
M(V1,V2) = 1;
将给出相同的矩阵。 (正如@AnderBiguri所说,在这种情况下,这实际上可能会使用更少的内存 )