Может кто-нибудь объяснить этот пример удаления элементов из матрицы в MATLAB? - PullRequest
1 голос
/ 21 февраля 2009

Следующий пример появляется в учебном курсе MATLAB:

X = [16  2 13;
     5  11  8;
     9   7 12;
     4  14  1]

Использование одного нижнего индекса удаляет один элемент или последовательность элементов и преобразует оставшиеся элементы в вектор строки. Итак:

X(2:2:10) = []

Результат:

X = [16 9 2 7 13 12 1]

Таинственно, вся вторая строка и первые два элемента в четвертой строке были удалены, но я не вижу соответствия между позицией удаленных элементов и индексным вектором 2:2:10. Может кто-нибудь объяснить, пожалуйста?

Ответы [ 2 ]

12 голосов
/ 21 февраля 2009

В приведенном вами примере показано линейное индексирование . Когда у вас есть многомерный массив, и вы задаете ему один скаляр или вектор, он индексирует вдоль каждого столбца сверху вниз и слева направо. Вот пример индексации для каждого измерения:

mat = [1 4 7; ...
       2 5 8; ...
       3 6 9];
submat = mat(1:2, 1:2);

submat будет содержать верхний левый угол матрицы: [1 4; 2 5]. Это связано с тем, что первый 1:2 в субиндексе обращается к первому измерению (строки), а второй 1:2 обращается ко второму измерению (столбцы), извлекая квадрат 2 на 2. Если вы не предоставляете индекс для каждого измерения, разделенный запятыми, а вместо этого только один индекс, MATLAB будет индексировать в матрицу, как если бы это был один большой вектор-столбец:

submat = mat(3, 3);     % "Normal" indexing: extracts element "9"
submat = mat(9);        % Linear indexing: also extracts element "9"
submat = mat([1 5 6]);  % Extracts elements "1", "5", and "6"

Подробнее см. Документацию MATLAB .

0 голосов
/ 17 декабря 2009

Это очень просто.

Он в основном начинается со второго элемента в этом примере и поднимается до десятого элемента (по столбцам) с шагом 2 и удаляет соответствующие элементы. Остальные элементы приводят к вектору строки.

...