MATLAB - извлечение строк матрицы - PullRequest
11 голосов
/ 07 сентября 2011

a = [1 2; 3 4; 5 6] Я хочу извлечь первую и третью строку a, поэтому у меня есть x = [1; 3] (индексы строк).

a(x) не работает.

Ответы [ 5 ]

23 голосов
/ 07 сентября 2011

Вот так: a([1,3],:)

Запятая разделяет размеры, : означает «весь диапазон», а квадратные скобки составляют список.

19 голосов
/ 01 ноября 2013

В MATLAB, если при индексации указан один параметр, это так называемая линейная индексация. Например, если у вас матрица 4х3, линейные индексы элементов выглядят так, они растут по столбцам:

1   5   9
2   6  10
3   7  11
4   8  12

Поскольку вы передали вектор [1 3] в качестве параметра, были выбраны только 1-й и 3-й элементы.

При выборе целых столбцов или строк должен использоваться следующий формат:

A(:, [list of columns])  % for whole columns
A([list of rows], :)     % for whole rows

Общая форма двумерной матричной индексации:

A([list of rows], [list of columns])

Результатом являются элементы на пересечении проиндексированных строк и столбцов. Результатами будут элементы, помеченные X:

A([2 4], [3 4 5 7])

. . C C C . C
R R X X X R X
. . C C C . C
R R X X X R X    

Справочник и некоторые похожие примеры: учебник по индексированию матрицы MATLAB .

1 голос
/ 09 сентября 2011

x = a([1 3]) ведет себя так:

temp = a(:)     % convert matrix 'a' into a column wise vector
x = temp([1 3]) % get the 1st and 3rd elements of 'a'
0 голосов
/ 30 января 2015

введите это: a([1 3],[1 2]) вывод

ans =
     1     2
     5     6
0 голосов
/ 07 сентября 2011

вы можете написать цикл для итерации по строкам матрицы:

for i = [1,3]
    a(i,:)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...