J'ai une fonction
np.sin(x / 2.) * np.exp(x / 4.) + 6. * np.exp(-x / 4.)
et je peux le tracer en utilisant le code suivant:
x = np.arange(-5, 15, 2)
y = np.sin(x / 2.) * np.exp(x / 4.) + 6. * np.exp(-x / 4.)
plt.plot(x, y)
plt.show()
mais si je définis le traçage de fonction ne fonctionne pas:
rr = np.arange(-5, 15, 2)
def y(o):
return np.sin(o / 2.) * np.exp(o / 4.) + 6. * np.exp(-o / 4.)
def h(b):
return int(y(b))
plt.plot(rr, h)
plt.show()
Pourquoi cela se produit-il et comment puis-je changer le code pour tracer la fonction?
Essayez ceci à la place:
import numpy as np
import matplotlib.pyplot as plt
rr = np.arange(-5, 15, 2)
def y(o):
return np.sin(o / 2.) * np.exp(o / 4.) + 6. * np.exp(-o / 4.)
plt.plot(rr, y(rr).astype(np.int))
plt.show()
La réponse de Hun est valable.
Cependant, si vous utilisez très précisément deux définitions de fonction, essayez ceci:
def y(o):
return np.sin(o / 2.) * np.exp(o / 4.) + 6. * np.exp(-o / 4.)
def h(b):
l = []
for i in b:
l.append(int(y(i)))
return l
rr = np.arange(-5, 15, 2)
plt.plot(rr, h(rr))
plt.show()
Pour répondre aux raisons pour lesquelles votre code n'a pas fonctionné, lorsque vous avez appelé la fonction 'h', vous n'avez transmis aucun paramètre, d'où le renvoi de la définition de la fonction ou du pointeur d'emplacement de mémoire de la fonction. Même si vous aviez passé rr à h, h n'a pas été manipulé pour le convertir en un itérable.