首页 > 解决方案 > 稀疏矩阵的多重赋值

问题描述

我在 MATLAB 中有一个稀疏矩阵,其维度为:8970240 x 8970240 = L x L. 让我们称之为M

我必须为矩阵中的许多元素分配 1 的值,例如,给定索引ij:对M(i, j) = 1

我有要执行存储在向量中的分配的索引,这是:

现在,问题是V1(7004160) 的长度与 (6389760) 的长度不同V2。这也会在我的稀疏矩阵中返回很多非零元素,总共7004160 x 6389760 = 44754901401600 = A非零元素。

我试图以M这种方式构建:

M = sparse(V1, V2, ones(A), L, L)

但它不起作用......

有人知道如何绕过它吗?

标签: matlabsparse-matrix

解决方案


这可能不是最有效的方法,但您可以通过构建包含整个索引对列表的新向量来做到这一点。

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,W2M 代替V1,V2

如果您不限于仅以稀疏格式存储 M,

M = zeros(L);
M(V1,V2) = 1;

将给出相同的矩阵。(正如@AnderBiguri 评论的那样,在这种特殊情况下,这实际上可能会使用更少的内存)


推荐阅读