我想使用矩阵中的值来索引数组。我将在示例中使用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
答案 0 :(得分:0)
使用Oleg指出的2D logical matrix from vector of coordinates (Basic matlab)的答案。我设法通过将下标转换为线性索引来解决我的问题:
pos = sub2ind(size(Grid), X(:,1), X(:,2));
Grid(pos) = 1;