2017-10-05 6 views
1

Je dois utiliser la bibliothèque mathématique pour effectuer des calculs sur un tableau.
J'ai essayé quelque chose comme ceci:Bibliothèque mathématique et tableaux en Python

import numpy as np 
import math 
a = np.array([0, 1, 2, 3]) 
a1 = np.vectorize(a) 
print("sin(a) = \n", math.sin(a1)) 

Malheureusement, il ne fonctionne pas. Une erreur s'est produite: "TypeError: must be real number, not vectorize". Comment puis-je utiliser la fonction vectorize pour calculer ce genre de choses?

+1

Je ne suis pas sûr de ce que vous essayez faire. Pour autant que je sache, 'vectorize' s'attend à ce que vous passiez une fonction, mais vous avez passé un tableau. Et 'math.sin' s'attend naturellement à ce que vous passiez un nombre, mais vous avez passé un' vectorized' (essentiellement une fonction). Qu'est-ce que vous essayez réellement d'accomplir? – smarx

+2

Lire les docs de numpy à nouveau, soigneusement! Vous voulez probablement juste '' 'np.sin (a)' '' (pas besoin d'importer des maths, pas besoin de les mélanger, et surtout pas besoin d'utiliser vectorize). – sascha

+0

@smarx Je voudrais obtenir quelque chose comme ceci: np.sin (a) mais je dois utiliser la bibliothèque de maths – Hendrra

Répondre

2
import numpy as np 
import math 
a = np.array([0, 1, 2, 3]) 
print("sin(a) = \n", [math.sin(x) for x in a]) 

math.sin nécessite un nombre réel à la fois.

6

Le point entier de numpy est que vous ne avez pas besoin de méthode math ou toute compréhension de la liste:

>>> import numpy as np 
>>> a = np.array([0, 1, 2, 3]) 
>>> a + 1 
array([1, 2, 3, 4]) 
>>> np.sin(a) 
array([ 0.  , 0.84147098, 0.90929743, 0.14112001]) 
>>> a ** 2 
array([0, 1, 4, 9]) 
>>> np.exp(a) 
array([ 1.  , 2.71828183, 7.3890561 , 20.08553692]) 

Vous pouvez utiliser a comme si elle était un scalaire et vous obtenez le tableau correspondant.

Si vous avez vraiment besoin d'utiliser math.sin (indice: vous ne), vous pouvez vectorize elle (la fonction elle-même, pas le tableau):

>>> vsin = np.vectorize(math.sin) 
>>> vsin(a) 
array([ 0.  , 0.84147098, 0.90929743, 0.14112001]) 
+2

Je viens de comprendre numpy grâce à cette réponse :) –