Matlab中單元(即用{ }
)和矩陣(即用[ ]
)有什麼區別?Matlab中單元和矩陣有什麼區別?
25
A
回答
28
有一個單元陣列和在MATLAB矩陣之間的若干不同之處:
甲單元陣列可以包含在每個電池元件的任意類型;而矩陣要求其元素的類型是均勻的,即相同類型。就內存佈局而言,矩陣的所有元素都連續地放在內存中,而單元數組包含指向數組中每個元素的指針。當考慮像高性能代碼的緩存局部性時,這可能很重要。
點2的另一面是,當您調整矩陣大小時,矩陣中的每個元素都必須複製到新分配的內存區域,但在單元陣列的情況下,只需要複製一列指針。根據要存儲的元素的大小和類型,這可能意味着單元陣列調整速度要快得多。
爲了說明在內存佈局的區別,讓我們考慮一個簡單的例子:
A = [10 20 30 40];
這裏MATLAB創建了一個名爲新的矩陣變量,分配足夠的內存來容納4個雙打(32字節,假設8字節加倍)並且將該存儲器分配給指向A的真實部分的指針。(如果創建複數的矩陣,則也爲想象的部分分配存儲器,和一個單獨的指針指向這個內存區域)。
現在讓我們創建包含這些元素的單元陣列:
B = cell(1, 4);
B{1,1} = 10;
B{1,2} = 20;
B{1,3} = 30;
B{1,4} = 40;
當MATLAB執行的第一條語句,它創建一個包含4個指針,其中的每一個可以指向任意類型的單元陣列。所以B
已經在使用16個字節(假設32位指針)。 下一行創建一個包含值10的1x1矩陣,並將其分配給第一個單元格數組元素。這裏的過程類似於上面描述的創建1x4矩陣的過程,除了分配的內存只足夠容納一個雙字節(8字節)。對於其餘3個陳述中的每一個都重複了這一點。因此,至少在第二個示例中使用16 + 8 x 4 = 48
字節。
請注意,MATLAB中的每個變量還包含稱爲mxArray的結構的內存開銷,該結構存儲維度,數據類型等信息以及更多關於該變量的信息。爲了簡單起見,我忽略了這種開銷。
相關問題
- 1. 轉換矩陣中的M11和M21單元有什麼區別?
- 2. 矩陣和圖像在Matlab中有什麼區別?
- 3. MATLAB中的向量和矩陣有什麼區別?
- 4. 矩陣和Tablix有什麼區別?
- 5. MATLAB中的{}和[]有什麼區別?
- 6. MATLAB中&和&&有什麼區別?
- 7. |有什麼區別?和||在MATLAB中?
- 8. *和。*在matlab中有什麼區別?
- 9. Matlab中ubit16和uint16有什麼區別?
- 10. 配置單元中的分區和分區有什麼區別?
- 11. numpy矩陣和numpy.matrixlib.defmatrix.matrix之間有什麼區別?
- 12. Matlab矩陣分區
- 13. MATLAB:3D矩陣單元陣列轉換
- 14. MATLAB分區單元陣列
- 15. Matlab中的單元(或矩陣)結構
- 16. matlab中'caller'和'base'工作區有什麼區別?
- 17. 有什麼區別`和$(Bash中有什麼區別?
- 18. 元組和compress_pair有什麼區別?
- 19. MATLAB:乘法2D矩陣與3D矩陣單元陣列
- 20. 這些矩陣模式有什麼區別?
- 21. MATLAB使用單元陣列中的元素填充矩陣
- 22. 單向TCP和UDP有什麼區別?
- 23. Matlab 2x2矩陣的陣列和逐元矩陣/向量乘法
- 24. Matlab:單元格到矩陣行
- 25. Matlab,將單元格轉換爲矩陣
- 26. Matlab將矩陣合併到單元格
- 27. 用matlab單元塊矩陣乘法
- 28. 在matlab中使用audioplayer時double和int16有什麼區別
- 29. MATLAB中的「addOptional」和「addParameter」函數有什麼區別?
- 30. rsenc和comm.RSDecoder在Matlab中有什麼區別
一對夫婦......這是一個有點過於具體的說像B這樣的單元陣列本身就是存儲指針。從概念上講,單元格就像指針一樣,但是Matlab沒有記錄它們是如何在'mxArray'內部實現的。我們只知道它在那裏存儲了一些開銷。 Matlab會告訴你有多少開銷:做'a = []; c = {a}; whos',Matlab將報告c使用的一些字節。我認爲這是每個mxarray有多少開銷。 –
...事實上,它以這種方式報告,並結合查看調試器中的地址和MAT文件格式等,向我暗示,單元mxArrays可能實際上是直接存儲mxArray結構的C數組(即它),而不是指針。 –
此外,我知道這是nitpicky,但它是Matlab中每個原始或複合數組* value *有一個mxArray,而不是每個變量。 B是一個變量。它包含一個4長單元格數組,每個單元格元素包含一個雙數組。所以B的數據結構中有5個mxArrays。這就是爲什麼單元格和結構體可能會使用很多開銷,可以使用'whos'建議的每個mxarray開銷來近似。 –