Matlab尾随单维
Matlab trailing singleton dimension
我有以下代码
o = ones(4,3,2)
c = cellfun(@squeeze,num2cell(o,[2 3]), 'UniformOutput', false)
如预期的那样给出了 4 个单元格,每个单元格包含 3x2 矩阵。
但是如果我将 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]
有没有可能得到正确的结果?
当o
的维度为4 x 3 x 1
时,num2cell(o, [2 3])
给出一个1 x 3
向量。如documentation中所述,squeeze
对二维数组没有影响,因此它将保留为行或列向量:
Two-dimensional arrays are unaffected by squeeze; if A
is a row or column vector or a scalar (1-by-1) value, then B = A
.
size(squeeze(rand(1, 3)))
% 1 3
size(squeeze(rand(3, 1)))
% 3 1
正如 所指出的,您可以将 squeeze
替换为 permute
以获得您期望的尺寸。
c = cellfun(@(x)permute(x, [2 3 1]), num2cell(o,[2 3]), 'UniformOutput', false)
我有以下代码
o = ones(4,3,2)
c = cellfun(@squeeze,num2cell(o,[2 3]), 'UniformOutput', false)
如预期的那样给出了 4 个单元格,每个单元格包含 3x2 矩阵。
但是如果我将 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]
有没有可能得到正确的结果?
当o
的维度为4 x 3 x 1
时,num2cell(o, [2 3])
给出一个1 x 3
向量。如documentation中所述,squeeze
对二维数组没有影响,因此它将保留为行或列向量:
Two-dimensional arrays are unaffected by squeeze; if
A
is a row or column vector or a scalar (1-by-1) value, thenB = A
.
size(squeeze(rand(1, 3)))
% 1 3
size(squeeze(rand(3, 1)))
% 3 1
正如 squeeze
替换为 permute
以获得您期望的尺寸。
c = cellfun(@(x)permute(x, [2 3 1]), num2cell(o,[2 3]), 'UniformOutput', false)