1

我想使用矩阵中的值来索引数组。我将在示例中使用 3x2 矩阵,但它可以是实际代码中任意高度的矩阵。在示例中,数组将是 5x5,但可以是任何大小的方形数组。数组的大小和矩阵的高度没有关系。

这是我的代码

X =

     2     1
     4     3
     1     4

Grid=zeros(5,5)

Grid =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

所以我想访问点 2,1 4,3 和 1,4 并在该位置的值上加一。

我试过下面的代码

Grid(X(:,1),X(:,2))=Grid(X(:,1),X(:,2))+1

这给出了这个结果

Grid =

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

这不是我需要的。我尝试过其他没有运气的方法,我想我可以使用 aloop或创建一个FLAT数组,但我真的不想这样做,我认为必须有更有效的方法。

有人有想法么?我正在使用 Matlab 2012b。

一如既往地感谢您的时间和您可能提供的任何帮助。

Edit-1 所需结果

这是我想要的结果

Grid =

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

编辑-2

坐标矩阵可能包含重复值,因此我希望数组(示例中为网格)中的相对位置中的值显示该坐标出现的次数。所以我的解决方案是

Grid(sub2ind(size(Grid),X(:,1),X(:,2)))=Grid(sub2ind(size(Grid),X(:,1),X(:,2)))+1
4

1 回答 1

0

使用Oleg 指出的坐标向量(基本 matlab)对 2D 逻辑矩阵的答案。我设法通过将下标转换为线性索引来解决我的问题:

pos       = sub2ind(size(Grid), X(:,1), X(:,2)); 
Grid(pos) = 1;
于 2013-07-11T12:54:23.107 回答