我正在寻找一个很好的方法"clean up"两个数组的维度,我想用广播结合在一起 . 特别是我想广播一维数组,直到多维数组的形状,然后添加两个数组 . 我对广播规则的理解告诉我,如果多维数组的最后一个维度与一维数组的维度相匹配,这应该可以找到 . 例如,具有形状(,3)和(10,3)的数组将添加精细

我的问题是,鉴于我所拥有的数组是如何构建的,匹配维度恰好是数组的第一个维度,因此不符合广播规则 . 作为参考,我的一个d阵列具有形状(,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]]

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