Примеры Matlab Indexing
[rows,cols] = size(M); % M is a rows x cols matrix
Доступ к записи в строке я, столбец J:
x = M(i,j);
Доступ всех элементов по строке я:
r = M(i,:);
Доступ все предметы на Колонка J:
c = M(:,j);
Доступ вход в строке I, Колонка J, лечения М в качестве вектора:
x = M(rows*(j-1)+i);
Доступа к подматрице из строки я к строке J и из колонки р на колонку д :
S = M(i:j,p:q);
Доступ всю матрицу (резервный):
M = M(:,:);
Пояснение
Оператор двоеточия либо дает диапазон индексов (1: 2 - это индексы в диапазоне от 1 до 2 включительно, а 3: 5 - диапазон 3, 4, 5) или дает весь диапазон для данного измерения, если не задан диапазон.
Это связано с тем фактом, что индексирование матрицы только одним индексом дает вам запись, которая может возникнуть при переходе через это множество записей (спуск по строкам, увеличение столбца и сброс строки после последней строки) вместо того, чтобы давать вам только указанную строку/столбец, приводит к вашим наблюдениям.
Я чувствую запах унаследованной поддержки. Матлаб полон такого рода вещей. –
@Mike, это не наследие. Matlab - это просто совершенно другой тип языка, чем C, C++, Java, Python и т. Д. Он предназначен для математиков (которые используются для индексирования на основе 1), больше, чем для программистов. Хотя он полезен сам по себе (он имеет очень хорошую поддержку матрицы), некоторые из его функций (например, не кеширование функций и повторное открытие/закрытие файла для каждого вызова каждой функции) делают его не идеальным для чего-либо, кроме прототипирования. –
@Mike: На самом деле, я считаю, что синтаксис '(:)' относительно * новый *, в отличие от старого синтаксиса сидения. – gnovice