如果我輸入X = rand(2,3)
,那麼size(X,1)
和size(X,2)
會產生預期結果。如果我輸入ndims (X)
,我會得到預期的兩個維度。尺寸()返回1,其中矩陣尺寸不應該存在
但是,size(X, k) == 1
,其中k
是大於3的整數。爲什麼會發生這種情況?
如果我輸入X = rand(2,3)
,那麼size(X,1)
和size(X,2)
會產生預期結果。如果我輸入ndims (X)
,我會得到預期的兩個維度。尺寸()返回1,其中矩陣尺寸不應該存在
但是,size(X, k) == 1
,其中k
是大於3的整數。爲什麼會發生這種情況?
如果尺寸行爲要一致,就必須發生這種情況。我們考慮一個大小爲1xn或nx1的向量。當然,方向很重要,否則MATLAB可以簡單地告訴你矢量的長度爲n。在後一種情況下,有一個尾隨的單身維度,所以隱含地存在無限多的尾隨單身維度。因此,列向量的大小實際上是nx1x1x1 ...,行向量的大小是1xnx1x1 ...
標量也是如此。如果標量大小爲1x1,那麼它的大小必須爲1x1x1x1x ...
大小必須告訴您一個對象的大小,但它應該停止在哪裏?我想如果你是從頭開始重新設計MATLAB,你可能會決定不報告任何尾隨的單例尺寸。所以一個列向量將被報告爲維度n,但是維度爲1xn的行向量?說實話,我實際上更喜歡被告知一個列向量具有維度nx1。但那麼它必須在邏輯上是維nx1x1x1 ...
無論如何,很久以前,MATLAB不允許你在數組中超過兩維索引。更高維的數組在這裏至少有20年左右的歷史,但仍有許多遺留代碼仍然有用。 (我有25年前編寫的代碼,仍在使用中)。您不想破壞現有代碼。
size(X,3)
是在你的情況下,第三維的大小IS 1
。例如嘗試X = rand(2, 3, 5, 23, 4,2, 6)
,現在size(X, 3)
應該給5
。
所有2D矩陣之後是真的一樣一個三維矩陣,其中該第三維度的大小是1
我想知道的是爲什麼第三(和第四,和第五......)尺寸應作爲尾隨單身尺寸存在。爲什麼不簡單地停在這兩個維度上,並嘗試在第三維上使用大小返回錯誤消息? – user1205197
@ user1205901,因爲如果'size'策略拋出錯誤**現有代碼的** LOT **將停止工作,並且所有地獄都會崩潰! – Shai
*一個二維矩陣真的是相同的一個三維矩陣,其中第三維的大小是1 *僅在瘋狂的世界中是正確的,例如,標量與1x1矩陣相同......哦,掛起上,這就是Matlab :-) –
這裏是一個三維陣列的可視化。叫它x
。陣列中的每個「切片」都是一個二維矩陣。
你可以看到,size(x,1) = 6
和size(x,2) = 6
,確實size(x,3) = 6
。 size
函數計算每邊的立方體數量。
現在考慮如果我們讓y
成爲數組的單個「切片」會發生什麼。它仍然在第一個和第二個方向上有六個立方體,所以size(y,1) = 6
和size(y,2) = 6
,但現在每個切片在第三個方向上只有一個立方體 - 所以size(y,3) = 1
。
雖然無法在圖片中顯示這些圖案,但此圖案會繼續保持較高的尺寸(4,5,6,...)。
+1爲可視化 – Shai
+1由於歷史原因,爲什麼大小應默認回答兩個元素,即使對於標量 –