我有以下代码
o = ones(4,3,2)
c = cellfun(@squeeze,num2cell(o,[2 3]), 'UniformOutput', false)
如预期的那样给出4个细胞,每个细胞含有3×2个基质。
但如果我将o的最后一个维度减少到一个,那么行为完全不符合预期:
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]
任何可能性如何获得正确的结果?
答案 0 :(得分:3)
当o
的维度为4 x 3 x 1
时,num2cell(o, [2 3])
会给出1 x 3
向量。如documentation中所述,squeeze
对2D数组没有影响,因此它将保留为行或列向量:
二维阵列不受挤压影响;如果
A
是行或列向量或标量(1 x 1)值,则为B = A
。
size(squeeze(rand(1, 3)))
% 1 3
size(squeeze(rand(3, 1)))
% 3 1
正如@Luis所指出的那样,您可以将squeeze
替换为permute
以获得您期望的尺寸。
c = cellfun(@(x)permute(x, [2 3 1]), num2cell(o,[2 3]), 'UniformOutput', false)