Irgendwie hab ich grad nen Hänger: angenommen die Indexwerte der Matrix f stehen in der variable a, also: f=rand(100,100); %2 D Matrix a=[50 50]; % gewünschter Index f(50,50) f(a)=? so funktioniert das nicht. Was man bekommt ist [f(a(1)) f(a(2))], was ich aber will ist f(a(1),a(2)). Gibt es da wirklich keine einfachere Möglichkeit, als f(a(1),a(2)) zu schreiben?
Vielleicht f(a*[1;100]-100) ? Ist nicht schön aber anders. Könnte sogar schnell sein, da MATLAB intern auch mit linearen indices rechnet...
j. c. schrieb: > so funktioniert das nicht. Was man bekommt ist [f(a(1)) f(a(2))], was > ich aber will ist f(a(1),a(2)). Gibt es da wirklich keine einfachere > Möglichkeit, als f(a(1),a(2)) zu schreiben? Vieleicht verstehe ich nicht, was Du willst, aber bei mir funktioniert das:
1 | >> f = [1 2 3; 4 5 6; 7 8 9]; |
2 | >> a = [3 2]; |
3 | >> f(a(1),a(2)) |
4 | |
5 | ans = |
6 | |
7 | 8
|
Also das Element in Zeile 3 und Spalte 2 wird ausgegeben.
J.-u. G. schrieb: > Vieleicht verstehe ich nicht [...] scheinbar: j. c. schrieb: > Gibt es da wirklich keine einfachere > Möglichkeit, als f(a(1),a(2)) zu schreiben?
Timmo H. schrieb: > J.-u. G. schrieb: >> Vieleicht verstehe ich nicht [...] > scheinbar: > j. c. schrieb: >> Gibt es da wirklich keine einfachere >> Möglichkeit, als f(a(1),a(2)) zu schreiben? Ah ok. Hab mir schon gedacht, was überlesen zu haben. Aber dann verstehe ich die Frage erst recht nicht. Er will f(a(1),a(2)) aber er will nicht f(a(1),a(2)) schreiben? Vieleicht geht ja was mit logischer Indexierung. Wobei damit die "komplizierte Schreibweise" wohl auch nur an eine andere Stelle geschoben wird.
Nimm mal an, es gibt statt 2 Indices 20. f(a(1),a(2),....) wird da schnell unübersichtlich!
j. c. schrieb: > Nimm mal an, es gibt statt 2 Indices 20. f(a(1),a(2),....) wird da > schnell unübersichtlich! Kannst Du etwas mehr zu dem Problem schreiben? Wie soll denn die Matrix mit 20 Indizes adressiert werden? Sollen dann 10 Elemente geliefert werden?
Also mal angenommen, Du hast die Matrix f:
1 | >> f = [1 2 3; 4 5 6; 7 8 9] |
2 | |
3 | f = |
4 | |
5 | 1 2 3 |
6 | 4 5 6 |
7 | 7 8 9 |
und hast einen Vektor
1 | >> index = [2 1 1 3 3 3]; |
der so zu interpretieren ist, dass die Elemente (2,1), (1,3) und (3,3) ausgelesen werden sollen. Dazu kann man lineare Indizierung verwenden. Zunächst ist mittels "sub2ind" ein Vektor mit den Indizes für die lineare Indexierung zu erstellen:
1 | >> linear_index = sub2ind(size(f),index(1:2:end),index(2:2:end)) |
2 | |
3 | linear_index = |
4 | |
5 | 2 7 9 |
Damit kann jetzt relativ einfach auf die gewünschten Elemente zugegriffen werden:
1 | >> f(linear_index) |
2 | |
3 | ans = |
4 | 4 3 9 |
Sind die Zeilen- und Spaltenindizes anders im Vektor "index" codiert, muß der Aufruf von "sub2ind" entsprechend angepasst werden.
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.