从2D矩阵动态填充3D矩阵

问题描述:

我有一个非常简短的问题。这就是我处理:从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但这并不完全适合我。

一般来说,你可以去在循环改变矩阵的大小,而不是你现在正在做的方式。

为什么不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