2016-05-28 4 views
0

Например, у меня есть матрица как A=[1,2,3,4;5,6,7,8;9,10,11,12]. И два массива x=[1,1,3,2] и y = [2,4,3,1], которые представляют X- и Y-координаты.Matlab, Как получить элементы в матрице с использованием двух массивов

И я хочу получить 4 элемента в матрице [A(1,2);A(1,4);A(3,3);A(2,1)]. Я использую этот код: result = diag(A(x,y)); Хотя я получаю то, что хочу, но если я занимаюсь большой матрицей, такой код работает слишком медленно для меня. Доза у кого-то есть лучший способ?

спасибо!

ответ

0

Вам нужно 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

Вероятно, не более быстрые из них, но следующие несколько подходов к этому:

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