【问题标题】:Access multiple elements and assign to each selected element a different value访问多个元素并为每个选定的元素分配不同的值
【发布时间】:2018-06-01 19:08:27
【问题描述】:

我需要知道在 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 列的大型 SPARSE MATRIX,它是一个用零填充的 SPARSE MATRIX。

然后我有另一个数组或矩阵,我们称它为 MN 行数,其中 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 中的所有行进行此分配,因为如果我使用循环或通用索引,则需要很长时间(我使用的是具有 16 GB RAM 的第 7 代 i7 处理器)。而且我还需要在 SPARSE_MATRIX 中保留零。

  • 编辑 2:已解决!谢谢Metahominid,我没有考虑清楚,但是稀疏函数确实解决了我的问题,我只是觉得我的脑回路昨天短路了,无法看透它哈哈哈。无论如何,谢谢你们!

问候!

【问题讨论】:

    标签: matlab indexing variable-assignment sparse-matrix


    【解决方案1】:

    您可以构造一个稀疏矩阵,如this

    A = sparse(i,j,v)
    

    S = sparse(i,j,v) 从三元组 i、j、 和 v 使得 S(i(k),j(k)) = v(k)。 max(i)-by-max(j) 输出 矩阵为长度(v)非零元素分配了空间。稀疏添加 将 v 中在 i 和 j 中有重复下标的元素放在一起。

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

    【讨论】:

      【解决方案2】:

      我之所以回答,部分原因是我无法发表评论。你的问题对我来说似乎有点令人困惑。 MATLAB 中的 sparse() 函数就是这样做的。

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

      给定您的数据格式,生成三个向量,ROWS = [row1; ...;行], COLS = [col1; ...; coln] 和 DATA = [val1; ...瓦伦]。我假设您的大小是整个矩阵的整体大小,而不是稀疏部分。

      然后

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

      A = 稀疏(行、列、数据、90....、90....)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-19
        • 2011-08-19
        • 1970-01-01
        • 2018-12-07
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多