在这里搜索一个人发现很多问题,如何将双胞胎阵列转换成一个大矩阵
在我的应用程序中,我有一个二维单元格数组(我们称之为celldata
大小m
次n
)所有相同大小的双矩阵(比如大小a
次b
)。
我想将该数据结构转换为一位4D双倍(m
次n
次a
次b
)。
reshape(cat(3,celldata{:}),m,n,a,b)
但也许还有其他方法直接这样做?也许有一个像
这样的电话cat([3 4],celldata{:,:})
或类似。
答案 0 :(得分:4)
我认为
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阵列上运行......