使用Matrix,Matlab中的值索引数组

时间:2013-07-11 12:23:57

标签: matlab vector indexing

我想使用矩阵中的值来索引数组。我将在示例中使用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

这不是我要求的。 我已经尝试了其他没有运气的方法,我想我可以使用loop或创建一个FLAT数组但不是真的想要,我认为必须有一种更有效的方式。

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

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

编辑-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

1 个答案:

答案 0 :(得分:0)

使用Oleg指出的2D logical matrix from vector of coordinates (Basic matlab)的答案。我设法通过将下标转换为线性索引来解决我的问题:

pos       = sub2ind(size(Grid), X(:,1), X(:,2)); 
Grid(pos) = 1;