将2D矩阵的2D单元(一致大小)转换为4D matlab double

时间:2013-05-08 06:28:15

标签: arrays matlab double cell reshape

在这里搜索一个人发现很多问题,如何将双胞胎阵列转换成一个大矩阵 在我的应用程序中,我有一个二维单元格数组(我们称之为celldata大小mn)所有相同大小的双矩阵(比如大小ab)。
我想将该数据结构转换为一位4D双倍(mnab)。

目前我这样做了
reshape(cat(3,celldata{:}),m,n,a,b)

但也许还有其他方法直接这样做?也许有一个像

这样的电话
cat([3 4],celldata{:,:})

或类似。

1 个答案:

答案 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文件(由于兼容性问题,循环中存在必要的低效率),而reshapecat是内置函数。这就是差异的来源。

我坚持你现在的方法:)

现在,我问你为什么要首先做这个转变。这是一个索引问题吗?因为

celldata{x,y}(w,z)  

阻止您进行转换,因此您可以像

那样编制索引
converted_celldata(x,y,w,z)

我没有看到其他原因,因为矩阵/矢量操作无论如何都不能在4D阵列上运行......