访问多个元素并为每个选定元素分配不同的值
Access multiple elements and assign to each selected element a different value
我想知道在 MATLAB 中是否有任何有效的方法来执行以下操作。
我有几个大的稀疏矩阵,每个矩阵的大小大约是 9000000x9000000。
我需要访问此类矩阵的多个元素,并为每个选定元素分配存储在另一个数组中的不同值。我举个例子:
我有:
- 大小为 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 行 x 9000000 列的大型稀疏矩阵,它是一个用零填充的稀疏矩阵。
然后我有另一个数组或矩阵,我们称它为 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
中的所有行进行此分配,因为如果我使用循环或公共索引,则需要很长时间(我使用的是第 7 代 i7 处理器16 GB 内存)。而且我还需要在 SPARSE_MATRIX.
中保留零
- 编辑 2:已解决!谢谢Metahominid,我没有想通,但是稀疏函数确实解决了我的问题,我只是觉得昨天我的脑回路短路了,无法看清哈哈哈。无论如何,谢谢你们!
此致!
您可以构造一个像 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....).
我想知道在 MATLAB 中是否有任何有效的方法来执行以下操作。
我有几个大的稀疏矩阵,每个矩阵的大小大约是 9000000x9000000。
我需要访问此类矩阵的多个元素,并为每个选定元素分配存储在另一个数组中的不同值。我举个例子:
我有:
- 大小为 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 行 x 9000000 列的大型稀疏矩阵,它是一个用零填充的稀疏矩阵。
然后我有另一个数组或矩阵,我们称它为 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
中的所有行进行此分配,因为如果我使用循环或公共索引,则需要很长时间(我使用的是第 7 代 i7 处理器16 GB 内存)。而且我还需要在 SPARSE_MATRIX.
- 编辑 2:已解决!谢谢Metahominid,我没有想通,但是稀疏函数确实解决了我的问题,我只是觉得昨天我的脑回路短路了,无法看清哈哈哈。无论如何,谢谢你们!
此致!
您可以构造一个像 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....).