2

在这里搜索会发现许多问题,如何将双精度元胞数组转换为一个大矩阵。在我的应用程序中,我有一个所有相同大小的双矩阵(可以说是 size times )
的二维单元数组(我们称之为size times )。 我想将该数据结构转换为一位 4D 双倍(乘以乘)。 目前我这样做是通过celldatamnab
mnab

reshape(cat(3,celldata{:}),m,n,a,b)

但也许还有其他方法可以直接做到这一点?也许像这样的电话

cat([3 4],celldata{:,:})

或类似的。

4

1 回答 1

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 数组上无论如何都不起作用......

于 2013-05-08T07:02:59.537 回答