如何使用NumPy计算矢量化lambda中的最大值?

时间:2016-06-20 19:00:52

标签: python numpy

我想在这两个函数上绘制最大值:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 100)
plt.plot(x, (lambda x: max(x**2, -.5 * x + 3))(x))
plt.show()

然而,它抱怨max

  

具有多个元素的数组的真值是不明确的。

以及np.max

  

TypeError:只能将length-1数组转换为Python标量

3 个答案:

答案 0 :(得分:2)

问题是lambda函数没有单独在numpy数组的每个元素上运行。它在整个数组上运行,max不知道如何比较两个数组。 np.max也不起作用,因为第二个输入应该是计算最大值的轴和数组。

您希望使用np.maximum来比较相同大小的多个数组中的相应元素。它将产生每个位置的最大元素。

作为一个例子

x = np.array([1,2,3])
y = np.array([3,2,1])

np.maximum(x, y)
#   3   2   3

对于您的具体用例:

plt.plot(x, np.maximum(x ** 2, -.5 * x + 3))

答案 1 :(得分:0)

请尝试使用此行:

np.array([x**2, 3-x/2]).max(0)

所有在一起:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 100)
plt.plot(x, np.array([x**2, 3-x/2]).max(0))
plt.show()

enter image description here

答案 2 :(得分:0)

我不完全理解你想要的最后一个x-term在这一行:

plt.plot(x, (lambda x: max(x**2, -.5 * x + 3))(x))

无论如何,你应该能够做到这样的事情:

y_func = np.vectorize(lambda x: max(x**2, -.5 * x + 3))
plt.plot(x, y_func(y))