我有两个Numpy数组,x
和y
,其中x
是n维的,n>;=1但在"编译时"是未知的,而y
是一维的.第一个维度x
保证与第一个(也是唯一的)维度y
匹配.我想得到他们的"总和",称之为s
,同样的维度为x
,如下:
import numpy as np
x = np.random.randn(5,100,10)
y = np.random.randn(5)
s = np.empty_like(x)
for i in range(x.shape[0]):
s[i] = x[i] + y[i]
但为了可读性,更重要的是速度方面的原因,我希望避免使用for循环.
显然,由于Numpy的广播惯例是这样运作的,我不能做到x+y
.这可能会抛出错误,或者更糟糕的是,可能会碰巧产生意外的结果.
我找到了两个相对不错的One衬垫,
s1 = (x.T + y).T
s2 = x + y[(slice(0, y.shape[0]),) + (np.newaxis,)*(x.ndim-1)]
还不错.第一个是利用这一事实,即它确实是x
中的first维与y
中唯一的维相匹配.否则,它是行不通的.第二个比较笼统,但很冗长.
由于我还在学习Python和Numpy,我想知道是否有其他(理想情况下更好,但我也对一般情况感兴趣)可以做我想做的事情.从本质上说,我可能在寻找一种超越广播惯例的方法……