2016-05-28 14 views
0

Zum Beispiel habe ich eine Matrix wie A=[1,2,3,4;5,6,7,8;9,10,11,12]. Und zwei Array x=[1,1,3,2] und y = [2,4,3,1], die X-und Y-Koordinate darstellen.Matlab, Wie man Elemente in einer Matrix mit zwei Arrays

Und ich möchte 4 Elemente in der Matrix [A(1,2);A(1,4);A(3,3);A(2,1)] bekommen. Ich benutze diesen Code: result = diag(A(x,y)); Obwohl ich bekomme, was ich will, aber wenn ich mit einer großen Matrix beschäftigen, läuft solcher Code zu langsam für mich. Hat jemand einen besseren Weg?

danke!

Antwort

0

Sie benötigen sub2ind

A = [1,2,3,4; 
    5,6,7,8; 
    9,10,11,12]; 
x = [1,1,3,2]; 
y = [2,4,3,1]; 
id = sub2ind(size(A),x,y) 
id = 
    4 10 9 2 
A(id) 
ans = 
    2 4 11 5 
0

Wahrscheinlich nicht die schneller sind, aber Folgenden sind einige Ansätze dazu:

A = [1 2 3 4; 
    5 6 7 8; 
    9 10 11 12]; 

x = [1 1 3 2]; 
y = [2 4 3 1]; 

%Approach-1 (Yours approach) 
diagonal = diag(A(x,y)) 

%Approach-2 
A1=A(x,y); LowUp=A1(tril(triu(A1))~=0) 

%Approach-3 
EYE= A1((eye(4,4).*A1)~=0) 

%Approach-4 
findeye=A1(find(eye(size(A1)))) 

%Approach-5 
subind=A(sub2ind(size(A),x,y)).' 

%Approach-6 
for i=1:4 
    loop(i)=A(x(i),y(i)); 
end 
loop=loop.' 
Verwandte Themen