Matlab拖尾单维



我有以下代码

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)

相关内容

  • 没有找到相关文章