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.

Erreur python " only length-1 arrays can be converted to Python scalars"

0 votes

Dans la cadre de mon TIPE j'ai besoin de tracer la courbe d'une fonction, voici mon code :

vtm=sqrt((2*m*g)/rho*S)   # je défini les variables
tap=to+(vtm/g)*atan(vo/vtm)
hap=ho+((vtm**2)/2*g)*log(1+(vo/vtm)**2)

def position(t):    
        return hap-((vtm**2)/g)*log(cosh(g*(tap-t)/vtm))

x=np.linspace(0,a,1000)
y=position(x)
plt.plot(x,y)
plt.show()

et à chaque fois ça me renvoit :

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "G:\TIPE\Optimisation fusée à eau.py", line 50, in position
    return hap-((vtm**2)/g)*log(cosh(g*(tap-t)/vtm))
TypeError: only length-1 arrays can be converted to Python scalars

J'ai remarqué que c'est la ligne " y=position2(x)" qui faisait planter le code mais je ne comprend pas pourquoi :/

demandé 8-Jun par TIPE fusée à eau
edité 8-Jun par max

1 Réponse

+1 vote

Je ne connais pas bien numpy, mais il semblerait que la fonction nb.linspace renvoie un tableau de nombres. (d'après ce que je vois ici : https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linspace.html )

Or ta fonction position prend comme paramètre un simple nombre. Il faut appliquer cette fonction sur tous les éléments du tableau des x.

Après la définition de position, je mettrais ce code là :

tab_x = np.linspace(0,a,1000)
tab_y = [ position(x) for x in tab_x ]
tab_y = np.asarray(tab_y)
plt.plot(tab_x, tab_y)
plt.show()

(Code non testé, parce que je n'ai pas numpy).

répondu 29-Nov par recher (354 points)
...