从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)
,那么你不会有问题。
为你+1,ym朋友,它确实工作。那么你能告诉我什么是循环中改变矩阵大小的规则?我之前做过类似的事情,就像这里一样预置矩阵 - 使用单个零矩阵,我从来没有过这种错误。 – 2014-10-20 11:36:44
“类似的东西”?像什么?一般来说,如果你想访问类似A(:,N)的东西,那么A应该被预先分配。 – 2014-10-20 11:38:36
'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