0

我有一个对应于一些 x,y 值的 nx2 矩阵,我想做的是用一些值替换 1x2 行的子集。目前我使用 find() 获取该子集。例如,如果我有以下矩阵:

 k=    [1 2
        3 4
        5 6
        7 8
        9 0]

我在其他一些相关的 5x1 数组上使用 find() 来表示索引

indices = [1 3 5]

然后,我想快速将 k 中的第 1、3 和 5 行更改为相同的预定行,例如 [-2 -6]。所以结果会是...

 k=     [-2 -6
          3  4
         -2 -6
          7  8
         -2 -6]

我知道对于单个行,我可以只执行 k(1,:) = [-2 -6] 但我似乎无法找到通常对行列表执行此操作的语法。k(indices,:) = [-2 -6] 不是有效的语法。对于第 1 列和第 2 列,当然有两行解决方案,但我认为有一种紧凑的方法可以做到这一点。谢谢。

4

2 回答 2

1

您需要确保要放入旧矩阵的矩阵的大小与要替换的元素的大小相同。在这种情况下,size(k(indices,:)) = [3 2]。用于repmat生成合适大小的矩阵,然后赋值成功。

replacement = [-2 -6];

k(indices,:) = repmat(replacement,length(indices),1)

k =

-2    -6
 3     4
-2    -6
 7     8
-2    -6
于 2012-06-07T20:50:12.277 回答
0

您还可以使用单索引重复该行:

row = [-2 -6];
k(indices,:) = row(ones(size(indices)),:);
于 2012-06-07T21:16:00.407 回答