我需要知道在MATLAB中是否有任何有效的方法来执行以下操作。
我有几个大的稀疏矩阵,每个大小大约是9000000x9000000。我需要访问这种矩阵的多个元素,并为每个选定的元素分配另一个存储在另一个数组中的值。我举个例子:
我有什么:
矩阵包含我想要访问的索引和值列表,这是一个这样的矩阵:
[row1, col1, value1;
row2, col2, value2;
...
rowN, colN, valueN]
N
是这种矩阵的长度。
我需要什么:
为SPARSE MATRIX分配相应索引的相应值,即:
SPARSE_MATRIX(row1, col1) = value1
SPARSE_MATRIX(row2, col2) = value2
...
SPARSE_MATRIX(rowN, colN) = valueN
提前致谢!
编辑:
感谢两位回答,我想我没有解释好自己,我会再试一次。
我已经有一个大约9000000行×9000000列的大型SPARSE MATRIX,它是一个填充零的SPARSE MATRIX。
然后我有另一个数组或矩阵,我们称之为M
行N
,其中N
可以取值0到9000000;和3列。前两列用于索引我的SPARSE MATRIX的一个元素,第三列用于存储我想要传输到SPARSE MATRIX的值,这是一个随机的M
行,i
:
SPARSE_MATRIX(M(i, 1), M(i, 2)) = M(i, 3)
我的想法是为所有行执行此操作,我已尝试使用常见索引:
SPARSE_MATRIX(M(:, 1), M(:, 2)) = M(:, 3)
现在我想尽快为M
中的所有行进行此分配,因为如果我使用循环或常见索引需要很长时间(我使用的是带有16 GB的第7代i7处理器) RAM)。而且我还需要在SPARSE_MATRIX中保留零。
问候!
答案 0 :(得分:1)
您可以构建像this这样的稀疏矩阵。
A = sparse(i,j,v)
S =稀疏(i,j,v)从三元组i,j生成稀疏矩阵S, 和v使得S(i(k),j(k))= v(k)。 max(i)-by-max(j)输出 矩阵具有分配给长度(v)非零元素的空间。稀疏补充 将v中的元素组合在一起,在i和j中有重复的下标。
因此,您可以简单地构造行向量,列向量和值向量。
答案 1 :(得分:0)
我正在回答的部分原因是我不能发表评论。你的问题对我来说似乎有点混乱。 MATLAB中的sparse()函数就是这样做的。
您可以直接在接口中输入索引和值数组,或者声明一个零稀疏矩阵并单独设置。
鉴于您的数据格式为三个向量,ROWS = [row1; ...; rown],COLS = [col1; ...; coln],和DATA = [val1; ...... valn]。我假设你的大小是整个矩阵的整体大小而不是稀疏部分。
然后
A =稀疏(ROWS,COLS,DATA)会做你想要的。您甚至可以指定原始矩阵大小。
A =稀疏(ROWS,COLS,DATA,90 ......,90 ....)。