2014-02-10 29 views
2

我有一個結構沒有值的結構數組初始化

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,但編碼器生成失敗,出現以下錯誤消息 ??? Subscripting into an empty matrix is not supported.

+0

如果不支持,請不要這樣做。而不是用'AStructY(1)= El'插入第一個元素,而是使用'AStructY = El' – Daniel

+0

'cell2struct'方法是否與編碼器生成兼容?我無法測試。 – chappjc

回答

2

我會做出以下假設:
1. AStructX是2 -D。
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是結構的一維數組,這些結構有fields1-field5 – aah134

+0

這是一個帶有自定義字段名稱的二維特殊情況,它不允許具有**多於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