我有以下代码
o = ones(4,3,2)
c = cellfun(@squeeze,num2cell(o,[2 3]), 'UniformOutput', false)
给出了预期的4个单元格,每个单元格包含3x2个矩阵。
但是如果我将0的最后一个维度降为1,则行为完全不像预期的那样:
o = ones(4,3,1)
c = cellfun(@squeeze,num2cell(o,[2 3]), 'UniformOutput', false)
输出为:
[1x3 double]
[1x3 double]
[1x3 double]
[1x3 double]
而我期望的是:
[3x1 double]
[3x1 double]
[3x1 double]
[3x1 double]
是否有可能得到正确的结果?
当o
的维数为4 x 3 x 1
时,num2cell(o, [2 3])
给出一个1 x 3
向量。如文档中所述,squeeze
对2D数组没有影响,因此它将保持为行或列向量:
二维数组不受挤压影响;如果
A
是行或列向量或标量(1 × 1)值,则B = A
.
size(squeeze(rand(1, 3)))
% 1 3
size(squeeze(rand(3, 1)))
% 3 1
正如@Luis指出的那样,您可以用permute
替换squeeze
以获得您期望的尺寸。
c = cellfun(@(x)permute(x, [2 3 1]), num2cell(o,[2 3]), 'UniformOutput', false)