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

Python 如何使用NumPy计算向量化lambda中的最大值?,python,numpy,Python,Numpy,我想画两个函数的最大值,如下所示: y_func = np.vectorize(lambda x: max(x**2, -.5 * x + 3)) plt.plot(x, y_func(y)) %matplotlib内联 将numpy作为np导入 将matplotlib.pyplot作为plt导入 x=np.linspace(-10100) plt.绘图(x,(λx:max(x**2,-.5*x+3))(x)) plt.show() 但是,它抱怨max: 包含多个元素的数组的真值不明确 还有

我想画两个函数的最大值,如下所示:

y_func = np.vectorize(lambda x: max(x**2, -.5 * x + 3))
plt.plot(x, y_func(y))
%matplotlib内联
将numpy作为np导入
将matplotlib.pyplot作为plt导入
x=np.linspace(-10100)
plt.绘图(x,(λx:max(x**2,-.5*x+3))(x))
plt.show()
但是,它抱怨
max

包含多个元素的数组的真值不明确

还有
np.max

TypeError:只有长度为1的数组才能转换为Python标量


请尝试使用以下行:

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()

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

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

例如

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))

我不完全理解你对这行最后一个x术语的要求:

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))

它没有调用
ndarray.max
;它正在调用常规的
max
函数。