在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
。
在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
。
我想當MATLAB遇到大括號時,它會嘗試將單元陣列的兩個元素處理爲結構數組的兩個元素。考慮
a.b(1:2) = struct('c', {1 2})
這將有2元件單元陣列分配到單個結構域:
struct('c', {{1 2}})
這是因爲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}}
通過它,您會發現它的工作原理與您的想法完全相同。
工程在FreeMat,但並不正確。試過雙大括號? 'struct('c',{{1 2}})' –
@ arne.b:謝謝,就是這樣!沒有真正想到添加雙大括號:你可以發表你的評論作爲答案,讓我可以接受它嗎? – HappyPy