Matlab - объединение нескалярных вложенных структур с пустыми полями без потери правильной индексации - PullRequest
0 голосов
/ 24 апреля 2020

В Matlab есть способ объединить нескалярную структуру без потери пустых полей? Это мешает моей способности индексировать в структуре.

Я бы предпочел не заполнять все свои поля "y" с помощью NaN по причинам управления памятью, но я могу сделать это, если это единственный способ обойти .

«код» всегда заполнен полностью и не имеет пустых ячеек. «у» может быть полностью заполнено, но обычно это не так.

Я приведу короткий пример: упрощенная структура (это действительно десятки тысяч записей с полями более 50)

% create example structure
x = struct('y',{1 [] 3 4},'code', {{'a'}, {'b'}, {'c'}, {'b'}});
% concatenate
out = [x.y];
% find indices with code 'b'
ind = find(strcmpi([x.code], 'b'));
% desired output
outSub = out(ind)

Я ожидаю, что из даст :

out = [1 NaN 3 4]

Вместо этого я получаю:

out = [1 3 4]

При попытке использовать код для создания индекса для поиска значений в out которые соответствуют желаемому значению кода, это, очевидно, не работает.
Ошибка: Индекс превышает количество элементов массива (3).

Требуемый результат выдаст:

out = [2 4];
outSub = [NaN 4]

Я полностью открыт для индексации и по-другому.

1 Ответ

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

Используя комментарий выше, вот окончательное решение:

% create example structure
x = struct('y',{1 [] 3 4},'code', {{'a'}, {'b'}, {'c'}, {'b'}});
% concatenate
out = {x.y};
% find indices with code 'b'
ind = find(strcmpi([x.code], 'b'));
% desired output - cell array
outSubCell = out(ind);
% substitute [] for NaN
outSubCell(cellfun('isempty',outSubCell)) = {NaN};
% convert output to double array
outSub = cell2mat(outSubCell)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...