2014-02-10 3 views
2

У меня есть структураStruct инициализация массив без значений

AStructX : 7x1 struct array with fields: 
    field1 
    field2 
    field3 
    field4 
    field5 

Теперь я хочу, чтобы создать пустой 1x7, который выглядит, как и предыдущие структуры, но с пустыми значениями.

Я попробовал AStructY = repmat(AStructX(1),1,7);, но скопированы значения AStructX.

Я попытался AStructY = repmat(AStructX(1),1,0);, когда я добавляю значения к нему, он проходит с MATLAB, но поколение Coder выдает следующее сообщение об ошибке ??? Subscripting into an empty matrix is not supported.

+0

Если это не поддерживается, не делайте этого. Вместо того, чтобы вставлять первый элемент с 'AStructY (1) = El' use' AStructY = El' – Daniel

+0

Подходит ли подход 'cell2struct' к генерации кодера? Я не могу проверить. – chappjc

ответ

2

я сделать следующие предположения:
1. AStructX является 2 -Д.
2. Вы хотите, чтобы новая структура имела размер size(AStructX').
3. Имена полей не фиксированы.

Чтобы сделать это, сначала нужно имена полей, а затем создать новую-структуру с пустыми ячейками в качестве значений:

names = fieldnames(AStructX)'; %'// row vector 
len = length(names); %// number of fields 
for i=1:len 
    names{2,i} = cell(size(AStructX')); %'// the contents are empty 
end 
AStructY = struct(names{:}); %// will take the names matrix columnwise 

Это приведет к совершенно пустым записям ([]), если вы хотите, чтобы инициализировать значение чтобы 0 вместо этого, линия внутри цикла становится

names{2,i} = num2cell(zeros(size(AStructX'))); %'// initialize values to 0 
+0

AStructX - это одномерный массив структур, структуры имеют поля1-field5 – aah134

+0

Это особый случай с 2-D с пользовательскими именами полей, его просто не разрешено иметь ** больше **, чем 2 измерения. Это будет работать в вашем примере. – scenia

+0

это дало мне структуру элементов массива, хотя, с ближе к было ли я пытаюсь получить – aah134

2

использование cell2struct:

len = 7; 
fn = fieldnames(AStructX) 
AStructY = cell2struct(repmat({[]},numel(fn),len),fn) 

То, что дает 7x1 struct array с теми же полями, содержимым. Если вы хотите 1x7, просто перенесите массив (т. Е. AStructY = cell2struct(...).').

+1

Правильно, там был встроенный способ. – scenia

+0

+1 ... и поздравляю с 10k! :-) –

+2

: D Я хотел бы поблагодарить 'accummarray',' bsxfun', 'doc' ... – chappjc

 Смежные вопросы

  • Нет связанных вопросов^_^