【发布时间】:2021-03-20 03:12:24
【问题描述】:
对于 nD 数组,能够自动挤压以删除单维数会很好。有没有办法做到这一点,我不知道?这对于聚合函数(例如求和、均值等)特别有用,在这些函数中,您总是希望得到具有较少维度的结果。
这是一个简单的例子:
>> A = ones(3,3,3);
>> B = mean(A);
>> size(B)
ans =
1 3 3
>> squeeze(B)
ans =
1 1 1
1 1 1
1 1 1
如果 Matlab/Octave 能够自动为我进行挤压,那就太好了。或者,如果有办法打开该选项(类似于 hold on 的情节)。
【问题讨论】:
-
你是指矩阵的显示,还是矩阵本身?如果维度任意从矩阵中消失,我会觉得很可怕,这将使编写算法逻辑变得非常困难。
-
另外,
a=[1,2,3]应该返回一个列向量吗?和a=[1;2;3]做同样的事情? -
@CrisLuengo 您的第二个问题已经得到解答,我认为,需要与
squeeze的行为兼容:行向量不被挤入列中跨度> -
问题是,单一维度被广泛用于代码的矢量化。如果您找到一个解决方案,可以让 matlab 始终自动执行此操作,它也会为自己的代码执行此操作,这通常依赖于现有的那些单例(例如,用于广播)。您可能会破坏许多 MATLAB 内置功能。
-
当我有足够的内存时,我会使用大量的 n 维投影和广播来加速代码。自动挤压会打破这一切。
标签: arrays matlab multidimensional-array octave