Forum: PC-Programmierung [Matlab] Variable als Index verwenden


von j. c. (jesuschristus)


Lesenswert?

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?

von stephan (Gast)


Lesenswert?

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...

von J.-u. G. (juwe)


Lesenswert?

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.

von Timmo H. (masterfx)


Lesenswert?

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?

von J.-u. G. (juwe)


Lesenswert?

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.

von j. c. (jesuschristus)


Lesenswert?

Nimm mal an, es gibt statt 2 Indices 20. f(a(1),a(2),....) wird da 
schnell unübersichtlich!

von J.-u. G. (juwe)


Lesenswert?

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?

von J.-u. G. (juwe)


Lesenswert?

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
Noch kein Account? Hier anmelden.