将相同的数组分配给行列表

时间:2012-06-07 20:28:23

标签: arrays matlab matrix

我有一个与某些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列这样做的两线解决方案,但我想有一个紧凑的方法来做到这一点。感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您也可以使用一个索引重复该行:

row = [-2 -6];
k(indices,:) = row(ones(size(indices)),:);