Matlab: матричная индексация логики

Я делаю очень простые примеры индексации матрицы. где код как указано ниже

>> A=[ 1 2 3 4 ; 5 6 7 8 ; 9 10 11  12  ]

A =

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

>> A(end, end-2)   

ans =

    10

>> A(2:end, end:-2:1)

ans =

     8     6
    12    10

здесь я немного смущен. когда я использую A(end, end-2) это занимает разницу от двух до первого столбца, и когда остается только один столбец, дальнейшая обработка не выполняется, но когда я использую A(2:end, end:-2:1) занимает 6 10 но как это печатать 8 12 в то время как остался только один столбец, и мы должны принять разницу в два справа налево, пожалуйста, кто-то объяснит эту простую точку

2 ответа

Решение

Выбор A(end, end-2) читает: взять элементы в последнем ряду A, которые появляются в столбце 4(конец) -2 = 2.

Выбор A(2:end, end:-2:1) аналогично читается: взять элементы в строках со 2 по 4(конец) и, начиная с последнего столбца, переходить назад в прыжках по два, то есть 4, затем 2.

Чтобы проверить индексацию, просто замените end с size(A,1) или же size(A,2) если соответственно найдены в строке и в позиции col.

Сначала общий материал: end это просто заполнитель для индекса, а именно последняя позиция в данном измерении массива. Например, для произвольного массива A(end,1) выберет последний элемент в столбце 1 и A(1,end) выберет последний элемент в первом ряду.

В вашем примере A(end, end-2) выбирает элемент в последнем ряду за два столбца перед последним.

Чтобы интерпретировать утверждение, такое как

A(2:end, end:-2:1)

это может помочь заменить end с фактическим индексом последних элементов строки / столбца, так что это эквивалентно

A(2:3, 4:-2:1)

более того 4:-2:1 эквивалентно списку 4,2 так как мы инструктируем, чтобы список начинался с 4, уменьшаясь с шагом 2, до (минимум) 1. Так что это эквивалентно

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

Наконец, следующая комбинация индексов подразумевается A([2 3],[4 2]):

 A(2,4)   A(2,2)
 A(3,4)   A(3,2)
Другие вопросы по тегам