Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Pourquoi j'obtiens TypeError: only length-1 arrays can be converted to Python scalars sur le code suivant

+1 vote

Voici mon code

def psi(x):
    return x*exp(-x)/(1-exp(-x))


x=np.linspace(0.001,20,200)
y=psi(x)
plt.plot(x,y)
plt.show()
demandé 26-Avr-2015 par Bib (156 points)
edité 26-Avr-2015 par max

de quel import viens le exp() ?

tu peux afficher la valeur de x? qu'est-ce qu'est censé renvoyer ton np.linspace(0.001,20,200)? un réel? des coordonnées?

Je pense que ta fonction psi quant à elle marche néanmoins pour des réels (en supposant que t'as pris ta fonction exp de la bibliothèque math) :

psi(2)
0.31303528549933135
psi(4)
0.07462944145509619
psi(2.2)
0.27414284102514364

Faudrait que tu donnes plus d'infos pour avoir une réponse à ta question =D

J'imagine du module math, le module a été importé en entier

En changeant exp par x*x j'ai le même type de réponse

un petit rappel http://indexerror.net/faq

x est censé être un Tableau Numpy donnant 200 points équirépartis dans [0.001,20]

et je voulais appliquer la fonction psi à tous les éléments de x pour obtenir un tableau dont les éléments sont les images des points précédents par psi. Sauf que apparemment
psi n'est pas une fonction du module math et que cette intruction ne fonctionne pas

Finalement en tatonnant Si on met :

y=[psi(k) for k in x], cela crèe un bon y et cela fonctionne

Si ça marche, copie ton commentaire, mets le en réponse et accepte-là. Comme ça ça servira aux prochains ^^

2 Réponses

+6 votes
 
Meilleure réponse

Il faut que ta fonction psi travaille avec des numpy.ndarray et non pas avec des réels, tu peux utiliser les fonctions fournies par numpy qui permettent de traiter directement des arrays :

import numpy as np
import matplotlib.pyplot as plt

def psi(x):
    return x*np.exp(-x)/(1-np.exp(-x))

x=np.linspace(0.001,20,200)
y=psi(x)
plt.plot(x,y)
plt.show()
répondu 27-Avr-2015 par Raphaël
sélectionné 27-Avr-2015 par Bib
0 votes

et avec un map? On peut garder le math.exp, bien que je ne sais pas ce qui est le mieux en termes de performances.

y = map(psi,x)
répondu 4-Mai-2015 par furankun (1,434 points)
...