2013-08-01 3 views
1

У меня есть следующая матрица:Найти несколько строк и столбцов комбинаций в матрице в Matlab

>> MatrixA = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] 
MatrixA = 
    1  2  3  4 
    5  6  7  8 
    9 10 11 12 
    13 14 15 16 

Я хочу найти следующее:

  • для строки 1, я хочу 2-й столбец
  • для строки 2, я хочу 3-й столбец
  • для строки 3, я хочу 4-й столбец
  • для строки 4, я хочу 4-й столбец

В настоящее время я сделать это с помощью следующей строки:

>>diag(MatrixA([1 2 3 4], [2 3 4 4])) 
ans = 
    2 
    7 
    12 
    16 

Есть более прямой способ сделать это (без использования diag)?

ответ

2

Ну, вы можете использовать sub2ind, это может быть более интуитивно понятным. Я не думаю, что есть много пользы, хотя, может быть, это более читаемо:

ind = sub2ind(size(MatrixA), [1 2 3 4], [2 3 4 4]) 
MatrixA(ind) 
+2

FYI Этот подход имеет меньше накладных расходов. Подход 'diag' сначала создает _matrix_ (а затем сводит его к вектору), тогда как' sub2ind' создает _vector_ с самого начала. Это может быть значительным для больших матриц. –

+0

@EitanT: Я поставил оба решения в цикл 'for' и выполнил их 100 000 раз. Для решения 'sub2ind' потребовалось 1,6 секунды. Решение 'diag' заняло 0,12 секунды. Будет ли накладная проблема играть большую роль во время выполнения, если матрица будет намного больше? –

+0

Я также получаю, что 'sub2ind' медленнее, чем' diag', но только ~ 1.5 раза. Может быть, это компромисс с памятью ... интересный. –

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