我经常有一个返回单个值的函数,例如最大值或整数。然后我想迭代另一个参数。这是一个使用抛物线的简单例子。我不认为它是广播,因为我只想要一维数组。在这种情况下它的最大值。一个现实世界的例子是太阳能电池的最大功率点作为光强度的函数,但原理与该示例相同。
import numpy as np
x = np.linspace(-1,1) # sometimes this is read from file
parameters = np.array([1,12,3,5,6])
maximums = np.zeros_like(parameters)
for idx, parameter in enumerate(parameters):
y = -x**2 + parameter
maximums[idx] = np.max(y) # after I have the maximum I don't need the rest of the data.
print(maximums)
在Python / Numpy中执行此操作的最佳方法是什么?我知道一个简化是使函数成为 def ,然后使用np.vectorize,但我的理解是它不会使代码更快。
答案 0 :(得分:1)
将其中一个数组扩展为2D
,然后让broadcasting
以向量化方式执行这些外部添加 -
maximums = (-x**2 + parameters[:,None]).max(1).astype(parameters.dtype)
或者,明确使用外部添加方法 -
np.add.outer(parameters, -x**2).max(1).astype(parameters.dtype)