访问多个元素并为每个选定元素分配不同的值

Access multiple elements and assign to each selected element a different value

我想知道在 MATLAB 中是否有任何有效的方法来执行以下操作。

我有几个大的稀疏矩阵,每个矩阵的大小大约是 9000000x9000000。

我需要访问此类矩阵的多个元素,并为每个选定元素分配存储在另一个数组中的不同值。我举个例子:

我有:

其中 N 是此类矩阵的长度。

我需要的:

给SPARSE MATRIX赋值给对应的索引,这是:

SPARSE_MATRIX(row1, col1) = value1
SPARSE_MATRIX(row2, col2) = value2
...
SPARSE_MATRIX(rowN, colN) = valueN

提前致谢!


编辑:

谢谢两位的回答,我觉得我没有解释清楚,我再试试。

我已经有一个大约 9000000 行 x 9000000 列的大型稀疏矩阵,它是一个用零填充的稀疏矩阵。

然后我有另一个数组或矩阵,我们称它为 M,行数为 N,其中 N 可以取 0 到 9000000 之间的值;和 3 列。前两列用于索引我的 SPARSE MATRIX 的元素,第三列存储我要传输到 SPARSE MATRIX 的值,这是给定随机行 Mi :

SPARSE_MATRIX(M(i, 1), M(i, 2)) = M(i, 3)

我的想法是对所有行执行此操作,我已尝试使用通用索引:

SPARSE_MATRIX(M(:, 1), M(:, 2)) = M(:, 3)

现在我想尽快对 M 中的所有行进行此分配,因为如果我使用循环或公共索引,则需要很长时间(我使用的是第 7 代 i7 处理器16 GB 内存)。而且我还需要在 SPARSE_MATRIX.

中保留零

此致!

您可以构造一个像 this 这样的稀疏矩阵。

A = sparse(i,j,v)

S = sparse(i,j,v) generates a sparse matrix S from the triplets i, j, and v such that S(i(k),j(k)) = v(k). The max(i)-by-max(j) output matrix has space allotted for length(v) nonzero elements. sparse adds together elements in v that have duplicate subscripts in i and j.

所以你可以简单地构造行向量、列向量和值向量。

我正在部分回答,因为我无法发表评论。你的问题对我来说似乎有点混乱。 MATLAB 中的 sparse() 函数就是这样做的。

您可以直接在界面中输入您的索引和值数组,或声明一个零的稀疏矩阵并单独设置每个。

根据你的数据格式制作三个向量,ROWS = [row1; ...;罗恩], COLS = [col1; ...; coln] 和 DATA = [val1; ... 瓦恩]。我假设你的大小是整个矩阵的整体大小而不是稀疏部分。

然后

A​​ = sparse(ROWS, COLS, DATA) 会做你想做的。您甚至可以指定原始矩阵大小。

A​​ = sparse(ROWS, COLS, DATA, 90...., 90....).