доступ к массивам Matlab - PullRequest
       25

доступ к массивам Matlab

0 голосов
/ 20 марта 2012

У меня есть 2D-массив, который содержит значения пикселей изображений. Я хочу хранить их в одномерном массиве. Как мне это сделать? И как я могу получить доступ к отдельным элементам в массиве 2D через массив 1D?

Ответы [ 3 ]

0 голосов
/ 20 марта 2012

Для массива P с размерами (m, n) оператор

reshape(P,[],1)

вернет (m * n) вектор-столбец;поменяйте местами порядок последних 2 аргументов, чтобы получить вектор строки.Будьте внимательны, если ваш массив пикселей равен (m, n), например, если у вас есть тройки RGB, ваш массив может быть (m, n, 3), и в этом случае вы должны быть немного умнее с изменением формы, ноПринцип остается тем же.

Вам не нужно ничего делать, чтобы использовать один индекс в двумерном массиве.Например, ссылка

P(i)

вернет i-й элемент массива, считая элементы в порядке (1,1), (2,1), (3,1) ..., то есть Matlab хранит массивы в мажорном столбце

0 голосов
/ 20 марта 2012

Короче говоря:

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
0 голосов
/ 20 марта 2012

Во-первых, это может помочь узнать немного о вашей намеченной цели.Однако, если мы предположим, что ваш массив называется 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);

Обратите внимание, что многие другие библиотеки ожидают, что вещи будут упорядочены по строкам, поэтому вы можете сначала переставить изображение, а затем изменить его форму и соответствующим образом настроить линейный индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...