Arrays Matlab2013a:sum+;压缩维度不一致性

Arrays Matlab2013a:sum+;压缩维度不一致性,arrays,matlab,matrix,multidimensional-array,transpose,Arrays,Matlab,Matrix,Multidimensional Array,Transpose,请让我试着用一个例子来解释 numel_last_a = 1; numel_last_b = 2 a = rand(2,20,numel_last_a); b = rand(2,20,numel_last_b); size(squeeze(sum(a,1))) size(squeeze(sum(b,1))) 在这种情况下,输出将是 ans = 1 20 ans = 20 2 这意味着我必须抓住numel_last_x==1的特殊情况,以应用转置操作以与后面的步骤保持一致。我猜一定有更优雅的

请让我试着用一个例子来解释

numel_last_a = 1;
numel_last_b = 2

a = rand(2,20,numel_last_a);
b = rand(2,20,numel_last_b);
size(squeeze(sum(a,1)))
size(squeeze(sum(b,1)))
在这种情况下,输出将是

ans = 1 20
ans = 20 2
这意味着我必须抓住numel_last_x==1的特殊情况,以应用转置操作以与后面的步骤保持一致。我猜一定有更优雅的解决方案。你们能帮帮我吗


编辑:对不起,代码错了

您可以使用shiftim而不是挤压

numel_last_a = 1;
numel_last_b = 2;

a = rand(2,20,numel_last_a);
b = rand(2,20,numel_last_b);
size(shiftdim(sum(a,1)))
size(shiftdim(sum(b,1)))
ans =

    20     1


ans =

    20     2

以下是关键的观察结果:

  • 您提到的不一致性深深地隐藏在Matlab语言中:所有数组都被认为至少是2D的。例如,
    ndims(pi)
    给出了
    2
  • Matlab中的另一个规则是,假设所有数组都有无限多个尾随单态维数。例如,
    size(pi,5)
    给出
    1
  • 根据观察1,如果这样做会得到少于两个维度,则不会删除单态维度。文件中提到了这一点:

    B=squage(A)
    返回一个数组
    B
    ,该数组的元素与
    A
    相同,但删除了所有单例维度。单个维度是
    大小(A,dim)=1的任何维度二维数组不受挤压的影响;如果
    A
    是行或列向量或标量(1×1)值,则
    B=A

    如果您想摆脱第一个单例,可以利用观察2并使用:

    给予

    numel_last_a = 1;
    numel_last_b = 2;
    a = rand(2,20,numel_last_a);
    b = rand(2,20,numel_last_b);
    as = reshape(sum(a,1), size(a,2), size(a,3));
    bs = reshape(sum(b,1), size(b,2), size(b,3));
    size(as)
    size(bs)
    
    ans =
        20     1
    ans =
        20     2