matlab - 稀疏矩阵的多重赋值
问题描述
我在 MATLAB 中有一个稀疏矩阵,其维度为:8970240 x 8970240 = L x L
. 让我们称之为M
。
我必须为矩阵中的许多元素分配 1 的值,例如,给定索引i
和j
:对M(i, j) = 1
。
我有要执行存储在向量中的分配的索引,这是:
- 一维向量
V1
存储行索引(i's)。 - 一维向量
V2
存储列索引 (j)。
现在,问题是V1
(7004160) 的长度与 (6389760) 的长度不同V2
。这也会在我的稀疏矩阵中返回很多非零元素,总共7004160 x 6389760 = 44754901401600 = A
非零元素。
我试图以M
这种方式构建:
M = sparse(V1, V2, ones(A), L, L)
但它不起作用......
有人知道如何绕过它吗?
解决方案
这可能不是最有效的方法,但您可以通过构建包含整个索引对列表的新向量来做到这一点。
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
M 代替V1,V2
如果您不限于仅以稀疏格式存储 M,
M = zeros(L);
M(V1,V2) = 1;
将给出相同的矩阵。(正如@AnderBiguri 评论的那样,在这种特殊情况下,这实际上可能会使用更少的内存)
推荐阅读
- c - 删除 break 和 continue 语句
- android - CustomLayout 的子视图中出现意外的命名空间前缀应用程序
- r - 如何让时间作为数据框中的行名
- c - getPositiveValues 不会返回值
- python - sedond Pass 上的 Python For 循环错误
- javascript - 原型继承如何在 JS 中工作
- python - OSError: [Errno 8] GeckoDriver 和 Selenium 在 MacOS 上的执行格式错误
- lua - io.read('*all') 尝试读取文件时返回 nil
- java - 如何修复 Spring Boot 中的错误自定义注释?
- excel - 以只读方式打开一个 Excel 文件,但以不同的文件名打开