Следният пример се появява в наръчника за 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-ри ред и първите два елемента в 4-ти ред са изтрити, но не мога да видя кореспонденцията между позицията на изтритите елементи и вектора на индекса 2:2:10
, Може ли някой да обясни?
Отговори:
12 за отговор № 1Показаният от вас пример показва линейно индексиране, Когато имате многоизмерни масиви и виедайте му един скалар или вектор, той се индексира по всяка колона от горе до долу и отляво надясно. Ето пример за индексиране във всяко измерение:
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 за отговор № 2
Това е много просто.
Тя основно започва от втория елемент в този пример и отива до десети елемент (колона мъдър) на стъпки от 2 и изтрива съответните елементи. Останалите елементи водят до ред вектор.