2014-02-19 48 views
1

在MATLAB,爲什麼這項工作:錯誤創建結構

>> a.b(1) = struct('c', [1 2]) 

但不是這個?:

>> a.b(1) = struct('c', {1 2}) 
Subscripted assignment dimension mismatch. 

有沒有解決的辦法?我知道我可以做a.b(1).c = {1 2},但我有其他的領域我想補充到a

+1

工程在FreeMat,但並不正確。試過雙大括號? 'struct('c',{{1 2}})' –

+0

@ arne.b:謝謝,就是這樣!沒有真正想到添加雙大括號:你可以發表你的評論作爲答案,讓我可以接受它嗎? – HappyPy

回答

3

我想當MATLAB遇到大括號時,它會嘗試將單元陣列的兩個元素處理爲結構數組的兩個元素。考慮

a.b(1:2) = struct('c', {1 2}) 

這將有2元件單元陣列分配到單個結構域:

struct('c', {{1 2}}) 
4

這是因爲struct('c', {1 2})做你(大概)認爲它在做什麼 - 創建一個領域,c的結構,具有價值{1, 2}。相反,它是創造一個1×2結構數組,其第一值(即,answer(1).c)爲1,而其第二值(即,answer(2).c)是2。

參見http://www.mathworks.com/help/matlab/ref/struct.html,並讀取該段「如果值是一個單元陣列...「獲取更多信息。

正如其他海報建議,包裝它在大括號作品。爲什麼?請閱讀我剛纔指出的文檔,然後使用{{1, 2}}通過它,您會發現它的工作原理與您的想法完全相同。