【发布时间】:2022-12-14 01:18:21
【问题描述】:
我有两个 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。这要么会引发错误,要么更糟的是,会巧合地产生意外结果。
我找到了两个相对不错的衬垫,
s1 = (x.T + y).T
s2 = x + y[(slice(0, y.shape[0]),) + (np.newaxis,)*(x.ndim-1)]
这还不错。第一个是利用它确实是第一的x 中与 y 中唯一维度匹配的维度。否则它不会工作。第二个更笼统,但相当冗长。
由于我仍在学习 Python 和 Numpy 的过程中,我想知道是否有其他(理想情况下更好,但我也对一般情况感兴趣)的替代方案来做我想做的事情。基本上我可能正在寻找的是一种覆盖广播约定的方法......
【问题讨论】:
-
在
y上使用reshape可能不那么罗嗦
标签: python numpy array-broadcasting