我经常有一个返回单个值的函数,例如最大值或整数。然后,我想遍历另一个参数。这是一个使用抛物线的简单示例。我不希望广播,因为我只想要1D阵列。在这种情况下,它的最大值。真实示例是太阳能电池的最大功率点随光强度的变化,但原理与此示例相同。

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,但我的理解是这样做并不能使代码更快。

最佳答案

将这些数组之一扩展为2D,然后让broadcasting以矢量化方式进行这些外部加法运算-

maximums = (-x**2 + parameters[:,None]).max(1).astype(parameters.dtype)


另外,明确使用外部加法-

np.add.outer(parameters, -x**2).max(1).astype(parameters.dtype)

关于python - 迭代两个numpy数组,返回1d数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47207331/

10-13 09:38