2017-10-05 50 views
1

我將使用數學庫對數組進行一些計算。
我想是這樣的: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)) 

遺憾的是它不工作。發生錯誤:"TypeError: must be real number, not vectorize"

如何使用矢量化函數來計算這種類型的東西?

+1

我不知道你想什麼去做。據我所知,'vectorize'期望你傳遞一個函數,但是你傳遞了一個數組。而'math.sin'當然希望你傳遞一個數字,但你已經通過了一個'vectorized'(本質上是一個函數)。你究竟在努力完成什麼? – smarx

+2

仔細閱讀numpy的文檔!你可能只想''''np.sin(a)'''(不需要導入數學;不需要混合這些數據,特別是不需要使用矢量化)。 – sascha

+0

@smarx我想得到像這樣的東西:np.sin(a),但我要使用數學庫 – Hendrra

回答

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一次只需要一個實數。

6

numpy整個的一點是,你不需要任何math方法或任何列表理解:

>>> 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]) 

您可以使用a就好像它是一個標量,你會得到相應的數組。

如果你真的需要使用math.sin(提示:你沒有),你可以vectorize它(函數本身,而不是數組):

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

我只是理解numpy感謝這個答案:) –