Matlab尾随单身维度

时间:2016-09-19 15:49:14

标签: matlab multidimensional-array dimensions trailing

我有以下代码

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]

任何可能性如何获得正确的结果?

1 个答案:

答案 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)