2014-10-20 186 views
2

我有一個非常簡短的問題。這就是我處理:從2D矩陣動態填充3D矩陣

%% Load all samples 
nazwa = dir('*.asc'); 
temp = zeros(1,1); 
A = zeros(1,1,1); 

for i = 1:25 
    filename = nazwa(i).name; 
    temp = importfile(filename); 
    A(:,:,i) = temp; 
end 

temp是4096x2矩陣,我希望有一個4096x2x25矩陣A結果。有了這段代碼,我得到一個Assignment has more non-singleton rhs dimensions than non-singleton subscripts 錯誤。我知道我可以使用細胞,或創建更大的臨時矩陣,它將一次包含所有數據,然後將其轉換爲3D矩陣,但我想知道我的想法有什麼問題。它是否索引?我在這裏發現了類似的問題:http://www.mathworks.com/matlabcentral/answers/57275-adding-values-to-3d-matrix但這並不完全適合我。

回答

1

一般來說,你可以去在循環改變矩陣的大小,而不是你現在正在做的方式。

爲什麼不Matlab的允許嗎?

想象一下矩陣temp每次迭代都會改變大小(你知道它沒有,但是Matlab不知道)那麼A的大小是多少? matlab應該如何調整它的大小?因此,如果你想要做你正在做的事情,你需要預先分配A.如果你告訴Matlab,A=zeros(2096,2,25),那麼你不會有問題。

+0

爲你+1,ym朋友,它確實工作。那麼你能告訴我什麼是循環中改變矩陣大小的規則?我之前做過類似的事情,就像這裏一樣預置矩陣 - 使用單個零矩陣,我從來沒有過這種錯誤。 – 2014-10-20 11:36:44

+0

「類似的東西」?像什麼?一般來說,如果你想訪問類似A(:,N)的東西,那麼A應該被預先分配。 – 2014-10-20 11:38:36

+0

'Yssmini =零(1,1); Yssmin =零(1,1);對於i = 1:size(GROOVES_VALUES,2)%查找Yss Yssmin(1,i)= min(Yss3d(:,1,i))每列中最小值的確切索引。 j = find(Yss3d(:,:,i)== Yssmin(1,i)); Yssmini(1,i)= j;結束'這裏例如 - 我已經預先分配了Yssmin一個接一個的矩陣,並且代碼仍然有效。 – 2014-10-20 12:20:12