[Matlab] Variable als Index verwenden

#2721384
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?
#2721451
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.
#2721471
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.
#2721560
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren