MATLAB one liner用于2D矩阵中的批量分配?

时间:2014-07-01 20:23:33

标签: matlab

说我有一个矩阵

A = zeros(5, 5);

我希望批量修改一些元素,而不是使用for循环进行循环。例如,我希望将标记为pts_to_modify的元素更改为1,其中

pts_to_modify=[[2 3]; [3 2]];

所以我希望A成为

0 0 0 0 0
0 0 1 0 0
0 1 0 0 0
0 0 0 0 0

但是,当我这样做时

A(pts_to_modify(:, 1), pts_to_modify(:, 2)) = 1,

我得到了

A =

     0     0     0     0     0
     0     1     1     0     0
     0     1     1     0     0
     0     0     0     0     0
     0     0     0     0     0

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:5)

您可以使用sub2ind

>> ind = sub2ind(size(A), pts_to_modify(1,:), pts_to_modify(2,:))
ind =
    12     8
>> A(ind) = 1
A =
      0     0     0     0     0
      0     0     1     0     0
      0     1     0     0     0
      0     0     0     0     0
      0     0     0     0     0

sub2ind
linear indexing