Ответ 1
Пример: a([1,3],:)
Запятая разделяет размеры, :
означает "весь диапазон", а квадратные скобки составляют список.
a = [1 2; 3 4; 5 6]
Я хочу извлечь первую и третью строку a
, поэтому у меня есть x = [1; 3]
(индексы строк).
a(x)
не работает.
Пример: a([1,3],:)
Запятая разделяет размеры, :
означает "весь диапазон", а квадратные скобки составляют список.
В MATLAB, если один параметр задан при индексировании, это так называемая линейная индексация. Например, если у вас есть матрица 4x3, линейные индексы элементов выглядят так: они растут по столбцам:
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
Общая форма индексирования матрицы 2d:
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.
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'
вы можете написать цикл для итерации по строкам матрицы:
for i = [1,3]
a(i,:)
end
введите это: a([1 3],[1 2])
выход
ans = 1 2 5 6