У меня есть 2D-массив, содержащий пиксельные значения изображений. Я хочу сохранить их в массиве 1D. Как мне это сделать? И как я могу получить доступ к отдельным элементам в 2D-массиве через массив 1D?Доступ к массивам matlab
ответ
Во-первых, это может помочь узнать о вашей намеченной цели. Однако, если мы предположим, ваш массив называется Img
, вы всегда можете использовать функцию reshape()
, чтобы изменить изображение в новый массив с формой numel(Img)
по 1
:
new_Img = reshape(Img, numel(Img), 1);
Согласно документации, это хранит записи столбцов что означает, что он сначала получает все элементы столбца 1, затем столбец 2 и т. д. Так что если вы хотите получить обратно запись (i,j)
из оригинального двумерного массива Img
, вы бы индекс в new_Img
, как это (позволяя M
быть число строк в матрице):
linear_indx = (j-1)*M+i;
new_Img(linear_indx) == Img(i,j);
Обратите внимание, что много другие библиотеки ожидают, что вещи будут упорядочены по строкам, и поэтому вы можете перенести свое изображение, а затем изменить его и соответствующим образом скорректировать линейный индекс.
Для массива P с размерами (M, N) заявление
reshape(P,[],1)
будет возвращать (т * п) вектор-столбец; замените порядок последних двух аргументов, чтобы вернуть вектор строки. Будьте осторожны, если ваш массив пикселей (m, n), если у вас есть трижды RGB, например, ваш массив может быть (m, n, 3), и в этом случае вы должны быть немного умнее с изменением формы, но принцип остается тем же.
Вам не нужно ничего делать, чтобы использовать один индекс в 2D-массиве. Так, например, ссылка
P(i)
будет возвращать I-й элемент массива подсчета элементов в порядке (1,1), (2,1), (3,1) ...
то есть Matlab хранит массивы в колонке-крупный заказ
Вкратце:
B = A(:);
Чтобы получить доступ к B
используя те же показатели, как и в A
:
B(sub2ind(size(A),i,j));
И полный пример:
% init
A = randn(10,5);
A(7,5)
>>> -0.1904
% 2-d -> 1-d
B = A(:);
% access
B(sub2ind(size(A),7,5))
>>> -0.1904
- 1. Доступ к массивам динамически
- 2. Доступ к массивам
- 3. Доступ к вложенным структурированным массивам с numpy
- 4. Доступ к массивам или объектам
- 5. Доступ к двумерным массивам PHP
- 6. Javascript: доступ к многомерным массивам
- 7. Доступ к массивам из индекса
- 8. Доступ к ассоциативным массивам PHP
- 9. Доступ к частным массивам C++
- 10. Доступ к массивам с методами
- 11. Доступ к массивам доступа к объекту
- 12. Применить функцию к нескольким массивам в Matlab
- 13. C указатели и доступ к массивам
- 14. Доступ к массивам в другом меню
- 15. Доступ к вложенным массивам/свойствам в javascript
- 16. Доступ к управляемым массивам и пиннингам
- 17. Доступ к параллельным массивам в шаблонах Django?
- 18. Доступ к массивам внутри массивов В PHP
- 19. Доступ к частичным массивам в Java?
- 20. Доступ к массивам в runnable NullPointException
- 21. Доступ к массивам объектов в Javascript
- 22. Доступ к массивам массивов или объектов
- 23. Доступ к массивам с помощью указателей
- 24. Доступ к массивам внутри объектов Java
- 25. Доступ к многомерным массивам значения в
- 26. Доступ к вложенным массивам через ng-repeat
- 27. PHP/Krumo: доступ к массивам внутри массивов?
- 28. Доступ к ассоциативным массивам в сценарии bash
- 29. JSON.net доступ к вложенным массивам, объектам
- 30. Прямой доступ к векторным элементам, подобным массивам
Линейная индексация не ограничивается 2D массивов; все массивы MATLAB являются фактически линейными структурами данных. [Здесь] (http://www.mathworks.com/help/techdoc/math/f1-86528.html#f1-86846) есть некоторая документация, объясняющая вещи и предоставляющая формулу 'sub2ind' для массивов N-D. –