Numpy系列(三)- 基本運算操作
阿新 • • 發佈:2019-03-20
random pac 新的 num line sting obj 系列 ann
Numpy 中數組上的算術運算符使用元素級別。最後的結果使用新的一個數組來返回。
import numpy as np a = np.array( [20,30,40,50] ) b = np.arange(4) b Out[113]: array([0, 1, 2, 3]) c = a -b c Out[114]: array([20, 29, 38, 47]) b ** 2 Out[115]: array([0, 1, 4, 9], dtype=int32) a < 34 Out[116]: array([ True, True, False, False])
需要註意的是,乘法運算符*
的運算在NumPy數組中也是元素級別的(這與許多矩陣語言不同)。如果想要執行矩陣乘積,可以使用 dot
函數:
A = np.array( [[1,1], [0,1]] ) B = np.array( [[2,0], [3,4]] ) A Out[117]: array([[1, 1], [0, 1]]) B Out[118]: array([[2, 0], [3, 4]]) A * B Out[119]: array([[2, 0], [0, 4]]) A.dot(B) Out[120]: array([[5, 4], [3, 4]]) np.dot(A,B) Out[121]: array([[5, 4], [3, 4]])
某些操作(如+=
和*=
)可以修改現有數組,而不是創建新數組。
a = np.ones((2,3), dtype=np.int32) a *= 3 a Out[122]: array([[3, 3, 3], [3, 3, 3]]) b = np.random.random((2,3)) b Out[124]: array([[0.39895014, 0.30638211, 0.9011525 ], [0.6135912 , 0.02488626, 0.67726569]]) a.dtype Out[125]: dtype(‘int32‘) b.dtype Out[126]: dtype(‘float64‘) b += a b Out[128]: array([[3.39895014, 3.30638211, 3.9011525 ], [3.6135912 , 3.02488626, 3.67726569]]) a += b Traceback (most recent call last): File "D:\pytho3.6\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-129-294cacd62d6f>", line 1, in <module> a += b TypeError: Cannot cast ufunc add output from dtype(‘float64‘) to dtype(‘int32‘) with casting rule ‘same_kind‘
當使用不同類型的數組操作時,結果數組的類型對應於更一般或更精確的數組(稱為向上轉換的行為)。
由於定義 a時,數據類型指定為np.int32,而 a+b 生成的數據類型為 np.float64,所以自動轉換出錯。
Numpy系列(三)- 基本運算操作