我根据子阵列空间和一般数组知道子阵列的中心(x,y)坐标。对于子阵列的其他部分,我也知道子阵列空间中的坐标 - 但我想找到一般数组中的坐标?在MATLAB中有一种优雅的方式吗?原则上我认为你仍然应该能够找到它在数组空间中的位置。
例如,假设(32,18)是元素的(x,y)坐标。然后你有一个包含相同元素的小型8x8子阵列。假设子阵列空间中相同元素的坐标是(3,5)。例如,(6.2,7.1)子阵列中较大数组中的坐标是什么?
答案 0 :(得分:0)
按照你的例子,我们取一个100x100的数组,并使用元素(32,18)作为我们的兴趣点。在MATLAB中,您可以使用冒号运算符来访问子数组。
array=rand(100);
x=32;
y=18;
subdim=8;
subx=3;
suby=5;
让我们建立一个64个元素的子数组,你的点为(3,5)。
subarray=array(x-(subx-1):x+(subdim-subx),y-(suby-1):y+(subdim-suby));
如您所见,现在subarray(3,5)==array(x,y);
因此,如果要查找子阵列元素(6,7)的原始数组索引:
X=x-subx+6;
Y=y-suby+7;
给出了
array(X,Y)==subarray(6,7);
或者,如果您只想查找子数组的元素(6,7)在原始数组中的位置,则可以使用find函数。 (注意,如果数组中有重复的元素,它将找到所有元素。)
[x,y]=find(array==subarray(6,7));
答案 1 :(得分:0)
如果你有一个m-by-n数组A
,你将坐标点(x1,y1)映射到元素A(1,1)
的中心,并将坐标点(x2,y2)映射到元素A(m,n)
的中心,这里是查找中心最接近给定坐标值(x3,y3)的数组元素的索引值的一般方法:
sizeA = size(A); %# The row and column sizes of A
p1 = [x1 y1]; %# Point for A(1,1)
p2 = [x2 y2]; %# Point for A(m,n)
p3 = [x3 y3]; %# Point to find indices for
indices = round((sizeA-1).*(p3-p1)./(p2-p1))+1; %# Get the raw indices
indices = min(max(indices,[1 1]),sizeA); %# Limit the indices to the array size