2013-06-25 274 views

回答

6

如果尺寸行爲要一致,就必須發生這種情況。我們考慮一個大小爲1xn或nx1的向量。當然,方向很重要,否則MATLAB可以簡單地告訴你矢量的長度爲n。在後一種情況下,有一個尾隨的單身維度,所以隱含地存在無限多的尾隨單身維度。因此,列向量的大小實際上是nx1x1x1 ...,行向量的大小是1xnx1x1 ...

標量也是如此。如果標量大小爲1x1,那麼它的大小必須爲1x1x1x1x ...

大小必須告訴您一個對象的大小,但它應該停止在哪裏?我想如果你是從頭開始重新設計MATLAB,你可能會決定不報告任何尾隨的單例尺寸。所以一個列向量將被報告爲維度n,但是維度爲1xn的行向量?說實話,我實際上更喜歡被告知一個列向量具有維度nx1。但那麼它必須在邏輯上是維nx1x1x1 ...

無論如何,很久以前,MATLAB不允許你在數組中超過兩維索引。更高維的數組在這裏至少有20年左右的歷史,但仍有許多遺留代碼仍然有用。 (我有25年前編寫的代碼,仍在使用中)。您不想破壞現有代碼。

+0

+1由於歷史原因,爲什麼大小應默認回答兩個元素,即使對於標量 –

2

size(X,3)是在你的情況下,第三維的大小IS 1。例如嘗試X = rand(2, 3, 5, 23, 4,2, 6),現在size(X, 3)應該給5

所有2D矩陣之後是真的一樣一個三維矩陣,其中該第三維度的大小是1

+0

我想知道的是爲什麼第三(和第四,和第五......)尺寸應作爲尾隨單身尺寸存在。爲什麼不簡單地停在這兩個維度上,並嘗試在第三維上使用大小返回錯誤消息? – user1205197

+0

@ user1205901,因爲如果'size'策略拋出錯誤**現有代碼的** LOT **將停止工作,並且所有地獄都會崩潰! – Shai

+2

*一個二維矩陣真的是相同的一個三維矩陣,其中第三維的大小是1 *僅在瘋狂的世界中是正確的,例如,標量與1x1矩陣相同......哦,掛起上,這就是Matlab :-) –

4

這裏是一個三維陣列的可視化。叫它x。陣列中的每個「切片」都是一個二維矩陣。

enter image description here

你可以看到,size(x,1) = 6size(x,2) = 6,確實size(x,3) = 6size函數計算每邊的立方體數量。

現在考慮如果我們讓y成爲數組的單個「切片」會發生什麼。它仍然在第一個和第二個方向上有六個立方體,所以size(y,1) = 6size(y,2) = 6,但現在每個切片在第三個方向上只有一個立方體 - 所以size(y,3) = 1

雖然無法在圖片中顯示這些圖案,但此圖案會繼續保持較高的尺寸(4,5,6,...)。

+0

+1爲可視化 – Shai