Как я могу построить функцию с операторами if? - PullRequest
0 голосов
/ 28 января 2020
def y(x):

    if x <0:
        return np.cos(x)
    else:
        np.exp(-x)

x = np.arange(-2*np.pi,2*np.pi,0.1)      
plt.plot(x,y(x))
plt.show()

Эта функция должна отображать y (x) как cos (x) , если значение x меньше нуля, иначе exp (- x) .

Я написал код, но он выдал ошибку. Как я могу исправить ошибку?

Я получаю эту ошибку

ValueError: The truth value of an array with more than one element is ambiguous. 
Use a.any() or a.all()

1 Ответ

1 голос
/ 28 января 2020

Есть лучшие способы сделать это, если производительность является проблемой, но одно решение состоит в том, чтобы сериализовать вашу функцию, чтобы применить ее ко всему массиву

def y(x):
    if x <0:
        return np.cos(x)
    else:
        return np.exp(-x)

vfunc = np.vectorize(y)
x = np.arange(-2*np.pi,2*np.pi,0.1)      
plt.plot(x,vfunc(x))
plt.show()

Возможно, лучше с точки зрения производительности:

def y(x):
    return np.concatenate((np.cos(x[x<0]), np.exp(-x[x>=0])))

x = np.arange(-2*np.pi,2*np.pi,0.1)      
plt.plot(x,y(x))
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...