2017-02-07 2 views
0

Я пытаюсь построить две функции func1 и func2 с использованием matplotlib и python. Я продолжаю получать ValueError для следующего кода и не знаю, что не так. Я просматривал связанные вопросы, пробовал массу вещей, и ничего не работает.Python matplotlib 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

max(2,3) явно 3, потому что 3 > 2.

Но когда мы сравниваем ndarray аргументы, мы не получаем один скалярный результат, а массив:

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

и мы не можем преобразовать массив BOOLS в один value-- должен его быть правдой, потому что есть хотя бы одно или ложное, потому что это не все правда? Или, как говорится в сообщении об ошибке, «Значение истинности массива с более чем одним элементом неоднозначно». Это означает, что встроенная функция max не работает, потому что она пытается включить ответ, верно ли сравнение.

К счастью, поскольку вы хотите, чтобы попарные максимумы, numpy уже имеет функцию, которая обрабатывает это, np.maximum. Замена встроенной max с np.maximum в вашем коде дает мне:

working graph

+0

Это почти работал, но сейчас что-то очень странное происходит. Я изменил max до np.maximum, но мой график не похож на ваш, вместо этого он проходит через начало координат. Любые мысли о том, почему это так? Что-то странное с моими конфигурациями pycharm? – user7531647