2014-04-11 55 views
0

在一個算法中,在每個級別中,我有兩個對應的矩陣,其中一個矩陣的元素比另一個多4倍。像孩子和父母,但我需要有相應的元素。考慮以下兩個指標作爲一個例子爲一個水平matlab中兩個不同矩陣的相應索引

1 5 9 13 
2 6 10 14 and 1 3 
3 7 11 15  2 4 
4 8 12 16  

所以例如,我想按1索引從所述第二矩陣以接收元件當我有1,2,5,6各元件的指數從第一矩陣或2當我有3,4,7,8或3,9,10,16,14等等。我怎樣才能做到這一點?

作爲另一個例子另一個層面:

1 9 17 25 33 41 49 57 
2 10 18 26 34 42 50 58 
3 11 19 27 35 43 51 59 and 1 5 9 13 
4 12 20 28 36 44 52 60  2 6 10 14 
5 13 21 29 37 45 53 61  3 7 11 15 
6 14 22 30 38 46 54 62  4 8 12 16 
7 15 23 31 39 47 55 63 
8 16 24 32 40 48 56 64 
+1

不確定您的意思是「我想要接收元素1元素索引」。你能更清楚地解釋「對於這兩個矩陣A和B,當輸入是X時,我希望輸出是Y」。 – Floris

回答

2

下面是一個這樣做的方式:

% Size of matrix A (8x8) 
sizeA = 8; 

% Size of matrix B (4x4) 
sizeB = 4; 

% Index of element on matrix A 
idxA = 43; 

% That is how you can get the corresponding index on matrix B 
[r, c] = ind2sub([sizeA sizeA], idxA); 
idxB = sub2ind([sizeB sizeB], ceil(r/2), ceil(c/2)) 

它會給你idxB = 10

0

如果你知道第一個矩陣二維指數,那麼你只要將每筆2就得到第二對指數:

r = 3; 
c = 2; 
% Then A(r,c) corresponds to B(floor(r/2), floor(c/2)) 

如果您不知道指數,而是具有元素值本身,則必須先找到二維指數:

val = 7; % test value 
[r c] = find(A==val); 
other_val = B(floor(r/2), floor(c/2)); 
+0

Peter:我想使用列明智索引,假設包含更多元素的矩陣被分成4個部分,例如由索引1,2,5,6組成的元素在一起,因爲我使用的是循環,我有1,2,5或6我想要從第二個矩陣索引1的元素 – user3482383

1

這可能是reshape可能對您有所幫助。

考慮

A = [1 5 9 13; 
    2 6 10 14; 
    3 7 11 15; 
    4 8 12 16]; 
B = reshape(permute(reshape(A, [2 2 2 2]), [2 4 1 3]), [4 4]); 
B 
    1 2 5 6 
    3 4 7 8 
    9 10 13 14 
11 12 15 16 

現在,你必須從一個層次到下一個索引的一個很好的映射。

B(1,:)對應於所有映射到元件1的第二陣列中的索引等

當矩陣變大(2N X 2N),操作變得

B = reshape(permute(reshape(A, [2 n 2 n]), [2 4 1 3]), [n*n 4]);