我认为
cell2mat(permute(celldata, [3 4 1 2]))
会成功的。然而,
%// create some bogus data
m = 1.1e2;
n = 1.2e2;
a = 1.3e2;
b = 1.4e2;
celldata = cellfun(@(~) randi(10, a,b, 'uint8'), cell(m,n), 'UniformOutput', false);
%// new method
tic
cell2mat(permute(celldata, [3 4 1 2]));
toc
%// your current method
tic
reshape(cat(3,celldata{:}),m,n,a,b);
toc
结果:
Elapsed time is 1.745495 seconds. % cell2mat/permute
Elapsed time is 0.305368 seconds. % reshape/cat
cell2mat
是一个 matlab m 文件(由于兼容性问题在循环中具有必要的低效率),而reshape
和cat
是内置的。这就是差异的来源。
我会坚持你目前的方法:)
现在,我要问你为什么要首先进行这种转换。是索引问题吗?因为
celldata{x,y}(w,z)
防止您进行转换,因此您可以像
converted_celldata(x,y,w,z)
我没有看到其他原因,因为矩阵/向量运算在 4D 数组上无论如何都不起作用......