我有一个4D矩阵(dims - x,y,z,t)。我想将其重新整形为长度为x*y*z
的1D单元数组,其中每个元素都是一个大小为t
的长向量,它捕获每个卷位置(x,y,z)
的所有元素。之后我需要重新塑造它。
我想过循环数组来做它,因为我无法真正找到内置函数来做它。
任何见解都会非常有用!谢谢!
答案 0 :(得分:4)
看看这是否是你想要的:
x = randn(2,3,4,5); % example data
x = reshape(x, [], size(x,4)); % collapse first three dimensions
x = mat2cell(x, ones(1,size(x,1)), size(x,2)); % split first dimension into cells
答案 1 :(得分:3)
Luis的答案非常适合半矢量化(<form enctype="multipart/form-data" action="/admin/process_post/savepost/" method="POST">
使用循环)。如果您想要的是一个大小为mat2cell
的单元格数组,其中每个元素的长度为x*y*z
,则可以在每个卷位置上使用循环并提取“暂时”占用的t
元素这个位于4D。确保squeeze
输出任何单个维度以获得结果向量。如果你想采用循环方法,这是需要考虑的事情。假设您的矩阵名为t
,请尝试以下操作:
A
要将其恢复为4D矩阵形式,您只需应用相同的逻辑,但反之亦然:
B = cell(size(A,1)*size(A,2)*size(A,3), 1);
count = 1;
for ii = 1 : size(A,1)
for jj = 1 : size(A,2)
for kk = 1 : size(A,3)
B{count} = squeeze(A(ii,jj,kk,:));
count = count + 1;
end
end
end
答案 2 :(得分:3)
像Luis&#39;解决方案,但更简单,更完整:
% Transform to cell
x = randn(2,3,4,5); % example data
y = reshape(x, [], size(x,4));
z = num2cell(y,2);
% transform back
x = reshape(cat(1,z{:}), size(x));