Scramble the positions of a cell array

14 Ansichten (letzte 30 Tage)
Abirami
Abirami am 21 Aug. 2014
Beantwortet: Azzi Abdelmalek am 21 Aug. 2014
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

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 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)

Weitere Antworten (1)

Michael Haderlein
Michael Haderlein am 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

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by