Python matplotlib ValueError:具有多个元素的数组的真值是不明确的

时间:2017-02-07 23:33:15

标签: python matlab matplotlib plot

我试图使用matplotlib和python绘制两个函数func1和func2。我一直在为以下代码获取ValueError,并且不知道出了什么问题。我搜索过相关问题,试了很多东西,似乎没什么用。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1)
plt.xlim(0, 10)
plt.ylim(0, 10)
plt.xlabel('$X$')
plt.ylabel('$Outputs$')
plt.title('Title')

x = np.arange(0, 10, .1)

def func1(X):
    output = max(3*X/7 - 3/7, 0, 12*X/35 - 3/35)
    return output

def func2(X):
    output = max(3*X/7 - 3/7, 0)
    return output

plt.plot(x, func1(x), 'g')
plt.plot(x , func2(x), 'b')

plt.show()

1 个答案:

答案 0 :(得分:1)

max(2,3)显然是3,因为3 > 2

但是当我们比较ndarray参数时,我们不会得到单个标量结果,而是一个数组:

In [23]: np.array([3,1]) > np.array([1,2])
Out[23]: array([ True, False], dtype=bool)

并且我们无法将一组bool转换为单个值 - 如果它是True,因为它至少有一个或False,因为它不是全部是真的吗?或者,正如错误消息所示,"具有多个元素的数组的真值是不明确的"。这意味着内置max函数失败,因为它试图分析比较是否为真。

幸运的是,因为看起来你想要成对的最大值,numpy已经有了一个处理它的函数,np.maximum。在代码中用max替换内置np.maximum会给我:

working graph