添加新的轴以促进广播,这是一种更好的方法吗?

时间:2018-10-28 00:16:05

标签: python arrays numpy multidimensional-array numpy-broadcasting

我正在寻找一种很好的方法来“清理”我想通过广播结合在一起的两个数组的维数。特别是我想广播一维数组,直到多维数组的形状,然后然后添加两个数组。我对广播规则的理解告诉我,应该找到多维数组的 last 维是否与一维数组的维匹配。例如,形状为(,3)和(10,3)的数组会很好

我的问题是,考虑到我如何构建阵列,匹配维度恰好是阵列的 first 维度,因此不符合广播规则。作为参考,我的一维数组的形状为(,3),多维数组的形状为(3,10,10,50)。

我可以通过重塑多维数组以使兼容维成为最后一个维来纠正此问题,但是我想避免这种情况,因为当发现不同维具有特定含义时,我发现重塑棘手的逻辑。

我还可以像下面的代码一样向一维数组添加空维度,直到一维数组的维度与下面的代码片段中的高维数组一样多。

>>> import numpy as np
>>> a = np.array([[1,2],
>>>               [3,4],
>>>               [5,6]])
>>> b = np.array([10,20,30])
>>> a+b[:,None]
array([[11, 12],
   [23, 24],
   [35, 36]])

这给了我想要的输出,但是在我的情况下,我的高维数组有4个不同的轴,因此我需要添加多个空的维,这开始让人觉得不雅。我可以做类似的事情

b = b[[slice(None)] + 3*[np.newaxis]]

,然后继续,但这似乎并不好。更一般地说,可以想象在原始一维的两侧需要任意数量的新轴,并编写一个辅助函数来概括以上逻辑。有没有更好/更清晰的方法来实现这一目标?

0 个答案:

没有答案