【问题标题】:How can I change the values of multiple points in a matrix?如何更改矩阵中多个点的值?
【发布时间】:2011-10-14 14:08:05
【问题描述】:

我有一个 [500x500] 的矩阵。我有另一个矩阵 [2x100],其中包含可能位于第一个矩阵内的坐标对。我希望能够将第一个矩阵的所有值都更改为零,而无需循环。

mtx = magic(500);
co_ords = [30,50,70;  30,50,70];
mtx(co_ords) = 0;

【问题讨论】:

  • 我不同意这是上述链接问题的完全重复。虽然这些解决方案将使用相同的方法,但这个方法涉及分配给一个矩阵,而不是索引一个矩阵,因此为每个问题设置一个单独的问题是有意义的。
  • @gnovice 我投票赞成删除另一个问题,因为它的措辞比这个更糟糕。我不同意访问和分配之间的区别值得两个单独的问题。

标签: matlab matrix indexing variable-assignment


【解决方案1】:

您可以使用函数SUB2IND 将您的下标对转换为线性索引:

mtx(sub2ind(size(mtx),co_ords(1,:),co_ords(2,:))) = 0;

【讨论】:

    【解决方案2】:

    另一个答案:

    mtx(co_ords(1,:)+(co_ords(2,:)-1)*500)=0;
    

    【讨论】:

      【解决方案3】:

      我在寻找 3-D 中的类似问题时偶然发现了这个问题。我有行和列索引,并想更改与这些索引相对应的所有值,但在每一页中(所以是整个第 3 维)。基本上,我想执行mtx(row(i),col(i),:) = 0;,但不循环遍历行和列向量。

      我想我会在这里分享我的解决方案,而不是提出一个新问题,因为它密切相关。

      另一个区别是我从一开始就可以使用线性索引,因为我使用find 确定它们。为了清楚起见,我将包括该部分。

      mtx = rand(100,100,3); % you guessed it, image data
      mtx2d = sum(mtx,3); % this is similar to brightness
      ind = find( mtx2d < 1.5 ); % filter out all pixels below some threshold
      
      % now comes the interesting part, the index magic
      allind = sub2ind([numel(mtx2d),3],repmat(ind,1,3),repmat(1:3,numel(ind),1));
      mtx(allind) = 0;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 2021-09-10
        • 2015-07-23
        相关资源
        最近更新 更多