1

我有以下代码

o = ones(4,3,2)
c = cellfun(@squeeze,num2cell(o,[2 3]), 'UniformOutput', false)

这给出了预期的 4 个单元格,每个单元格包含 3x2 矩阵。

但是,如果我将 o 的最后一个维度减少到 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]

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

4

1 回答 1

3

当 的维数o4 x 3 x 1时,num2cell(o, [2 3])给出一个1 x 3向量。如文档中所述,squeeze对二维数组没有影响,因此它将保持为行或列向量:

二维数组不受挤压的影响;如果A是行或列向量或标量 (1×1) 值,则B = A.

size(squeeze(rand(1, 3)))
%   1   3

size(squeeze(rand(3, 1)))
%   3   1

正如@Luis所指出的,您可以替换squeezepermute以获得您期望的尺寸。

c = cellfun(@(x)permute(x, [2 3 1]), num2cell(o,[2 3]), 'UniformOutput', false)
于 2016-09-19T15:53:03.597 回答