我想在这两个函数上绘制最大值:
%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标量
答案 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()
答案 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))