web-dev-qa-db-fra.com

TypeError: ufunc 'multiply' ne contenait pas de boucle avec les types de signature correspondants dtype ('S32') dtype ('S32') dtype ('S32')

Je suis nouveau dans le codage mais j'essaie de créer un programme vraiment simple qui tracera essentiellement une ligne. L'utilisateur entrera des valeurs pour v et a puis v et a et x détermineront y. J'ai essayé de le faire avec ceci:

x = np.linspace(0., 9., 10)
a = raw_input('Acceleration =')
v = raw_input('Velocity = ')
y=v*x-0.5*a*x**2.

en gros, cela représentera une parabole où v est la vitesse, a est l'accélération et x est le temps. Mais, je continue à recevoir cette erreur:

TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32'
) dtype('S32') dtype('S32')
14
A. Robinson

De la documentation de raw_input :

La fonction lit ensuite une ligne depuis l'entrée, la convertit en chaîne (supprimant une nouvelle ligne de fin) et la renvoie.

Donc, ce qui se passe, c'est que vous essayez de multiplier une chaîne avec un flottant, quelque chose comme y="3" * x - 0.5 * "3" *x**2, qui n'est pas défini.

Le moyen le plus simple de contourner ce problème consiste à convertir la chaîne d'entrée en premier pour qu'elle flotte.

x = np.linspace(0., 9., 10)
a = float(raw_input('Acceleration ='))
v = float(raw_input('Velocity = '))
y=v*x-0.5*a*x**2

N'oubliez pas que si vous utilisez python 3, vous devez utiliser inputau lieu de raw_input,

a = float(input('Acceleration ='))
10

J'ai rencontré ce problème récemment, changez le dtype de x en quelque chose de spécifique en faisant:

x = np.asarray(x, dtype='float64')
3
logicb0mb