matlab |
03.07.2013, 12:05 | mathmal | Auf diesen Beitrag antworten » | ||
matlab Was genau passiert hier. Hat jemand einen Link wo das erklärt wird? size(b(:,1)) ans = 17165 1 >> size(a(:,1)) ans = 8924 1 >> c = a(b(:,1),1); >> size(c) ans = 17165 1 Meine Ideen: Man setzt da eine viel größere Matrix in eine kleinere ein. Dort finden iwie Verlgeichsoperationen statt. |
||||
03.07.2013, 12:25 | steveon | Auf diesen Beitrag antworten » | ||
hi, b ist eine 17165 x n Matrix, wobei man über n nichts Näheres weiß. a ist eine 8924 x m Matrix, wobei man m nicht näher kennt. (zumindest verrätst du nix über n und m) wenn du jetzt die matrix c definierst als c = a(b(:,1),1) so werden zunächst die Einträge a(b(1,1),1) bis a(b(8924,1),1) angelegt und dann hörtdie matrix a ja eigentlich auf... aber matlab vergrößert die matrix a automatisch sodass auch die einträge a(b(8925,1),1) bis a(b(17165,1),1) in c eingetragen werden. dann hat c also 17165 zeilen und 1 spalte und deswegen size(c)=17165 1 |
||||
03.07.2013, 12:55 | zyko | Auf diesen Beitrag antworten » | ||
in c stehen nur die Werte von a, deren Indizes mit b übereinstimmen und zwar in der Reihenfolge, wie sie in b stehen. Sei b=[2;1;2;1] dann ist mit c=a(b) c(1)=a(b(1))=a(2) c(2)=a(b(2))=a(1) c(3)=a(b(3))=a(2) c(2)=a(b(4))=a(1) Wenn aber b ein logical array ist z.B. b=a>5; dann ist b genauso groß wie a, enthält scheinbar 0 und 1, diese werden aber als false bzw. true interpretiert. c=a(b) liefert dann ein array, das in der Regel kleiner als a ist und nur die Elemente von a enthält, deren Wert>5 ist. Logical Arrays haben den Vorteil, dass man damit schnelle logische Operationen durchführen kann: b=a>5; d=a<10; e=b & d; In e sind alle Elemente true für die die Werte von a zwischen 5 und 10 liegen c=a(e); liefert genau diese Werte und ignoriert alle anderen. |
||||
03.07.2013, 17:24 | mathmal | Auf diesen Beitrag antworten » | ||
Das Beispiel hat geholfen danke. Genau so scheint es zu sein. Danke |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |