matlab 結構體struct函數使用方法

1.struct函數直接定義

查閱文檔是這樣的:struct(field1,value1,field2,value2,.....

上面這個格式很重要記住

field1和field2稱爲這個結構體的字段,要熟悉字段這個詞語。

注意:這裏先提一句 matlab中的文檔顯示Any nonscalar cell arrays in the set value1,...,valueN must have the same dimensions.

意思是 任何非標量元胞數組必須尺寸相同,後面會需要用到

目錄

1.struct函數直接定義

查閱文檔是這樣的:struct(field1,value1,field2,value2,.....)

1.1 先舉例正常的:s = struct('f1','name','f2','blue')

1.2 如果f2變成普通數組呢?

1.3 這裏複習一下元胞數組

1.4 再變化,如果其中一個字段比如f2變成元胞數組即cell型數組呢?

情況一:存在一個value內容爲n個元素的元胞數組,不管是1×n還是n×1,只要行數或者列數不超過2

情況二:value中全部是元胞數組

2 結束語



1.1 先舉例正常的:s = struct'f1','name','f2','blue')

所以創造了一個s結構體,這個s結構體包括兩個字段,一個字段是一種內容。此時可以看到這個結構體大小是1×1,原因是這裏面每個字段的大小是1×1


1.2 如果f2變成普通數組呢?

結果如下圖


1.3 這裏複習一下元胞數組

防止有人忘記或者小白看不懂(當然我也是小白233333),具體見我上篇博客

元胞數組(cell)創建及賦值:

cell(n),創造n×n大小的數組

從這裏能看到兩種括號的應用區別了嗎?當用{ }時,代表直接寫值,用()定位時,賦值就必須在內容外層再套一層{ }

舉例:a = {'NAME',[1 2 3;2 4 6],ones(2,3),{'color',[1 2]}}

用逗號 “”做間隔 

根據上圖裏第4個框內內容可知,cell內可以再次賦值一個cell型數組的


1.4 再變化,如果其中一個字段比如f2變成元胞數組即cell型數組呢?

舉例

s = struct('f1','name','f2',{[1 2 3;2 4 6],'color',ones(2,2)})

將f2的內容變成了一個大小爲1×3的元胞數組,此時觀察結構體內容值

會發現字段變成了3,對比前面字段是每個field的名字而不同,那麼這種不同是爲什麼呢?

沒有爲什麼哈哈哈,規則就是這樣的,當存在元胞數組時,那麼有兩種情況

  • 情況一:存在一個value內容爲n個元素的元胞數組,不管是1×n還是n×1,只要行數或者列數不超過2

那麼字段會變成n大小,同時結構體數組大小爲元胞數組大小,就像上面例子f1也會像f2一樣變成1×3,但是f1只有一個,怎麼辦呢,就會默認全部填充這一個,填充成和元胞數組一樣大小的

  • 情況二:value中全部是元胞數組

一開頭我介紹的那句文檔中翻譯出來的話,全部是元胞數組的話,必須尺寸相同纔可以

不然就會出現,比如我把f1位置改成兩個元素的元胞數組

s = struct('f1',{'name',[2 3 4]'},'f2',{[1 2 3,2 4 6],'color',ones(2,2),'laa'})


2 結束語

至此struct函數講解結束,還是非常簡單的,如果理解不清楚一定要親自把代碼自己在matlab上輸一遍運行看結果,嘗試了就知道啦!!

不要偷懶哦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章