Hallo allerseits, ich habe ein Cell-Array der folgenden Form (effektiv nur ein Ausschnitt um die gewünschte Funktionalität zu verdeutlichen, es können für jede Spalte unterschiedlichste Werte auftreten). Die erste Spalte enthält eine Matrix, die übrigen Spalten jeweils Strings. A a c d B a c e C a c f D a c g E b c h F a c d G a c e H a c f I a c g J b c h Ich möchte die Einträge nun nach den Spalten 2 und 4 gruppiert auslesen, d.h. am Ende möchte ich Folgendes haben: A a c d F a c d B a c e G a c e C a c f H a c f D a c g I a c g E b c h J b c h Kann mir jemand sagen, wie ich das mit möglichst wenig Aufwand hinkriegen kann? Ich bin soweit gekommen, dass ich mir die unique-Werte für 'a' ausgeben lasse, aber die Gruppierung nach der vierten Spalte kriege ich einfach nicht hin. Viele Grüße, Steven
Hi ... ich schätze mal du meinst in matlab oder ? ;-) das Problem ist natürlich auf viele Wege zu lösen z.b über forschleifen und aufsteigender Indizierung -> jedoch finde ich ist dies mi reshape und einer 3ten Dimension am elegantesten ...
1 | |
2 | |
3 | % create a cellarray with ones |
4 | s=ones(10,3);arrayfun(@(x) ({x}), s) |
5 | |
6 | numR=2; % number of rows in subMatrix |
7 | numC=3; % number of columns subMatrix |
8 | |
9 | % exMatR is a 3dimensional matrix with your blocks in 3rd dimension |
10 | exMatR=reshape(exMat,numR,numC,size(exMat,1)/numR); |
Dabei ist es natürlich notwendig das die Dimensionen der SubMatrix in die Hauptmatrix passen ! lg Peter
Oje man sollte genau lesen ... sorry peter schrieb: > Hi ... > > > ich schätze mal du meinst in matlab oder ? ;-) das Problem ist natürlich > auf viele Wege zu lösen z.b über forschleifen und aufsteigender > Indizierung -> jedoch finde ich ist dies mi reshape und einer 3ten > Dimension am elegantesten ... > > > lg Peter
So jetzt aber ;-) [code] % matrix mat=['Aacd';'Bace';'Cacf';'Dacg';'Ebch';'Facd';'Gace';'Hacf';'Iacg';'Jbc h']; matR=arrayfun(@(x) ({x}), mat); % build a cellarray % sort 2nd column [sortVal,sortInd]=sort(matR(:,2)); matR(:,:)=matR(val,:) % reorder matrix due to first sorting % sort 4nd column [sortVal1,sortInd2]=sort(matR(:,4)); matR(:,:)=matR(val2,:) % reorder matrix due to second sorting % create subBlocks numC=4; % colums of subBlock numR=2; % rows of subBlock exMatR=reshape(matR,numR,numC,size(exMat,1)/numR); [\code] lg Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.