Как разделить массив в Matlab на элементы разных размеров в одной структуре данных? - PullRequest
1 голос
/ 19 апреля 2020

Предположим, у меня есть следующий массив, определенный в MATLAB:

x = 1:100;

Я хотел бы сформировать одну структуру данных "bin", как показано ниже:

bin(:,1) = x(1:33);  % copy 33 elements into 1st bin
bin(:,2) = x(34:66); % copy another 33 elements into 2nd bin
bin(:,3) = x(67:100);% copy remaining 34 elements into 3rd bin

Однако, Matlab не позволит добавить последние 34 элемента в bin (:, 3), поскольку предыдущие два имеют размер 33. Я бы предпочел не использовать другую переменную только для хранения последних 34 элементов. Есть ли способ в MATLAB обойти это (например, как я могу использовать одну и ту же структуру данных «bin» для хранения всех 100 элементов в 3 столбцах разных размеров?)

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Для подобных задач существует ячейка с. Они работают как указатели на других языках: один различает его адрес и его содержание. Таким образом, вы можете просматривать адрес (который находится рядом друг с другом) при доступе к его содержимому (которое может быть разного размера или типа)

bin = cell(1,3); % allocating the cell. not necessary but good practice
bin{1} = x(1:33);  % copy 33 elements into 1st bin
bin{2} = x(34:66); % copy another 33 elements into 2nd bin
bin{3} = x(67:100);% copy remaining 34 elements into 3rd bin

индексирование с помощью фигурных скобок { } даст вам содержимое ячейки, тогда как ( ) дает вам элемент ячейки (которая, очевидно, является ячейкой). Это работает как нарезка других типов переменных. Обратите внимание, что вы помещаете полные массивы в один элемент ячейки bin{1} или bin{1,1} возвращает массив 1x33 цифр c.

0 голосов
/ 19 апреля 2020

Массив ячеек - это структура, которая может содержать любой объект, например, массивы различной длины. mat2cell позволяет разбить ваш массив на ячейку из нескольких массивов.

bin=mat2cell(x,[33,33,34])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...