如果我有像這樣一個矩陣:拆分大型矩陣爲新的更小的矩陣
x = rand(256,144160);
我怎樣才能把它分解成更小的矩陣是256 x 901
?
我試過mat2cell(x,256,901)
,但我得到這個錯誤:
Input arguments,
D1
throughD2
, must sum to each dimension of the input matrix size,[256 144160].'
如果我有像這樣一個矩陣:拆分大型矩陣爲新的更小的矩陣
x = rand(256,144160);
我怎樣才能把它分解成更小的矩陣是256 x 901
?
我試過mat2cell(x,256,901)
,但我得到這個錯誤:
Input arguments,
D1
throughD2
, must sum to each dimension of the input matrix size,[256 144160].'
那是因爲你沒有使用正確mat2cell
。你需要做的是指定你想如何分割出每個維度。第一個層面是好的,只要你想每個矩陣有256行,但對於第二個維度需要144160/901 = 160
矩陣與901列每個矩陣。
這樣,就需要用901指定160個的值的矢量的每個元素:
y = mat2cell(x, 256, 901*ones(1,160));
這告訴你想901個矩陣,其中每個矩陣是160列和所有有256行mat2cell
。這將顯示錯誤消息的內容。它告訴你,你想要分割這個矩陣的方式,你分裂的每個維度必須加起來與原始矩陣的大小相加。第一個維度設置爲256,因此非常明顯,您希望所有矩陣都有256行。對於列,您必須有160個矩陣,每列901列,因此總計爲160 x 901 = 144160
。你只指定901,因此MATLAB抱怨告訴你901 != 144160
。
mat2cell
的輸出將創建一個矩陣的單元陣列,您可以使用y{k}
來訪問矩陣。花括號非常重要。但是,如果我能推薦一下,我不會用mat2cell
,你或許應該使用reshape
,並創建一個三維矩陣,其中每個片是256 x 901
:
y = reshape(x, 256, 901, []);
使用電池陣列是非常低效的,因爲它被設計成成爲通用容器。如果您打算進行數值分析,或者如果您想一次訪問多個矩陣,請使用純數字類型。使用reshape
的另一個好處是可以避免令人頭疼的是你總共需要160個矩陣。藉助於此,就可以離開尺寸空(即[]
)它告訴reshape
命令自動確定如何填充在基質x
給出的元件該尺寸中的一個。請注意,我已經在第三方面明智地做到了這一點。換句話說,它會爲第三維自動計算160。在這裏,y(:,:,k)
給你第k個矩陣,是3D矩陣y
的第k個片。
'reshape' FTW ... +1 – beaker