2017-07-25 4 views
0

Ich habe eine Struktur (Daten), die aus 322 Zellen a 296 (Features) * 2000 (Zeitpunkte) bestehen. Ich möchte eine Matrix pro Zeitpunkt, die aus Versuchen^Features^Zeitpunkten (322 * 296 * 2000) besteht. Was ich zur Zeit mache und auch das, was funktioniert ist mit einer for-Schleife:Reshape Struktur in eine Matrix ohne For-Schleife

for k=1:size(data.trial{1,1},2) 
    for i= 1:length(data.trialinfo) 
     between=data.trial{1,i}'; 
     data(i,:,k)=between(k,:); 
    end 
end 

jemand eine schnellere Art und Weise denken, das zu tun? Weil es ewig dauert, wenn die Matrix zunimmt.

Danke!

Carlos

+1

haben Sie versucht ** ** reshape Funktion? –

+1

Siehe auch ['cell2mat'] (http://www.mathworks.com/help/matlab/ref/cell2mat.html?s_tid=doc_ta) – EBH

+0

Oh ja - ich hätte das erwähnen sollen, aber ich habe beide ausprobiert sie in vielen Variationen und es gibt mir nie die gleichen Ergebnisse; zum Beispiel: Umformen (cell2mat (data.trial) ', [322, 296, 2000]); – Carlos

Antwort

0

Versuchen:

data2 = permute(reshape([data.trial{:}],296,2000,322),[3,1,2]); 

Das Problem mit reshape ist, dass es in den Spalten denkt, so dass Sie permute Nachworte müssen, denn das ist, wie Sie die Ausgabe eingestellt (zB 3D transponieren.) Variable in Ihrer Schleife. Ich verwendete Verkettung anstelle von cell2mat für die Geschwindigkeit.

Ich nahm dies als Beispieldaten gearbeitet:

for ii= 1:322 
    data.trial{1,ii} = rand(296,2000); 
end