arrays - MATLAB 2013a : sum + squeeze dimension inconsistencies

标签 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 的特殊情况来应用转置操作以与后续步骤保持一致。我猜一定有更优雅的解决方案。你们能帮帮我吗?

编辑:抱歉,代码错误!

最佳答案

以下观察结果是关键:

  1. 您提到的不一致性深埋在 Matlab 语言中:所有数组都被认为是至少是二维的。例如,ndims(pi) 给出 2
  2. Matlab 中的另一条规则是假定所有数组都具有无限多的尾随单维度。例如,size(pi,5) 给出 1

根据观察 1,squeeze如果这样做会给出少于两个维度,则不会删除单例维度。文档中提到了这一点:

B = squeeze(A) returns an array B with the same elements as A, but with all singleton dimensions removed. A singleton dimension is any dimension for which size(A,dim) = 1. 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.

如果你想摆脱first单例,你可以利用观察2并使用reshape :

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

关于arrays - MATLAB 2013a : sum + squeeze dimension inconsistencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33251991/

相关文章:

python - 使用 python 读取大型文本文件比使用 Matlab 读取相同文本的相同代码慢得多,知道为什么吗?

Java串口写入/发送ASCII数据

java - Java 中的透视 3D 投影

javascript - 将对象数组传递给curl

java - 从 hashmap 中检索数组

javascript - 如何在 Javascript 中将索引关联数组转换为逗号分隔关联数组

java - 如何将表解析为Java数据结构?

javascript - 需要基于现有对象在 Javascript 中创建对象,考虑到其性能,这是有效的

string - 在 MATLAB 中检查字符串是否包含任何数字

Javascript for 循环跳过矩阵内的旋转