2013-04-09 3 views
0

У меня есть матрица, каквыбора элементов в массиве в MATLAB

A = 
[ 10 20; 
    30 40; 
    50 60 ] 

также у меня есть вектор, как

idx = 
[ 2; 1; 1] 

, что означает, что я хочу

во второй колонке (= 20) в первом ряду,

первая колонка (= 30) во втором ряду и

первый столбец (= 50) в третьем ряду.

Как я могу найти вектор с [20; 30; 50]?

ответ

0
A = [ 10 20; 30 40; 50 60 ] 
idx = [ 2; 1; 1] 
t =(idx==2)*2 + idx 
t1 = (idx==1) 
A(t+ (t1 .* [0:2]')) 

Выхода

ans = 
20 
30 
50 

Теперь используйте общие номера, и он будет соответствовать любым другим размерам.

1

Вы можете использовать функцию SUB2IND;

result = A(sub2ind(size(A),(1:numel(idx))',idx)); 

Для некоторого улучшения производительности вы можете заменить SUB2IND вручную вычислительном линейные индексы:

linidx = (1:numel(idx))' + (idx - 1).*size(A,1); 
result = A(linidx); 

В любом случае убедитесь, что numel(idx) не превышает количество строк матрицы.

Смежные вопросы