2010-05-06 90 views
0

我知道以子阵列空间和通用阵列表示的子阵列的中心坐标(x,y)。对于子阵列的其他部分,我也知道子阵列空间中的坐标 - 但我想在常规数组中找到坐标?有没有一种优雅的方式来做到这一点在MATLAB中?原则上,我认为你仍然应该能够找到数组空间中的位置。例如,假设(32,18)是元素的(x,y)坐标。然后你有一个包含相同元素的小8x8子数组。假设子阵列空间中同一元素的坐标是(3,5)。在较大阵列中,子阵列中的某些东西(例如(6.2,7.1))的坐标是什么?从子阵列坐标转换为阵列坐标

+0

你能举一个具体的例子吗?我不明白这个问题。 – MatlabDoug 2010-05-06 17:19:03

+0

@ user111:查看上面的评论和左边。应该有一个单词“编辑”,你可以点击编辑你的文章。请做到这一点,而不是发布答案。 – gnovice 2010-05-07 03:01:42

+0

如果您在该问题下看不到“编辑”链接,则可能是因为您有3个不同的帐户(http://stackoverflow.com/users)。尝试获得OpenID登录并合并这些帐户,以便您可以编辑您的问题以添加额外信息而不是发布答案。 – gnovice 2010-05-07 14:29:16

回答

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));

0

如果你有一个M-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