2010-05-06 87 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