Scramble the positions of a cell array

1 view (last 30 days)
I have two cell array as follows
Z= (2,5) (2,3) (2,1) (2,2) (2,4)
(4,5) (4,3) (4,1) (4,2) (4,4)
(5,5) (5,3) (5,1) (5,2) (5,4)
(3,5) (3,3) (3,1) (3,2) (3,4)
(1,5) (1,3) (1,1) (1,2) (1,4)
W= 'ATGC' 'ACTG' 'AGCT' 'AATT' 'TATG'
'GCTA' 'GACT' 'TACG' 'TGAT' 'ATAT'
'TCGG' 'CATA' 'TAAT' 'TTTT' 'CTGC'
'AAGT' 'AAGG' 'TGGG' 'TGTA' 'CAAA'
'GTGG' 'CTCT' 'GATT' 'CGTG' 'CTGG'
Now i have a big problem....i need to create a new cell array 'G' where the value of W should be placed accprding to the positions given in Z.
For eg: the value ATGC (ie;the first element of W) should be placed at (2,5) of 'G'. Both the cell arrays are just examples...i need to do it for a 256*256 array. Please help.Thanks in advance

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 21 Aug 2014
Z= {[2,5] [2,3] [2,1] [2,2] [2,4]
[4,5] [4,3] [4,1] [4,2] [4,4]
[5,5] [5,3] [5,1] [5,2] [5,4]
[3,5] [3,3] [3,1] [3,2] [3,4]
[1,5] [1,3] [1,1] [1,2] [1,4]}
W={ 'ATGC' 'ACTG' 'AGCT' 'AATT' 'TATG'
'GCTA' 'GACT' 'TACG' 'TGAT' 'ATAT'
'TCGG' 'CATA' 'TAAT' 'TTTT' 'CTGC'
'AAGT' 'AAGG' 'TGGG' 'TGTA' 'CAAA'
'GTGG' 'CTCT' 'GATT' 'CGTG' 'CTGG'}
out=cellfun(@(x) W{x(1),x(2)},Z,'un',0)

More Answers (1)

Michael Haderlein
Michael Haderlein on 21 Aug 2014
Dear Abirami,
one possibility:
ind=cellfun(@(x) sub2ind(size(Z),x(1),x(2)),Z);
[~,s]=sort(ind(:));
G=reshape(W(s),size(Z));
Best regards,
Michael

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!