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)