NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其餘各類工具的基礎.數組
NumPy的主要功能:dom
安裝方法:pip install numpyide
引用方式:import numpy as np函數
NumPy的主要對象是同質多維數組。它是一張表,全部元素(一般是數字)的類型都相同,並經過正整數元組索引.NumPy的數組的類稱爲ndarray
。別名爲array
。工具
建立ndarray:性能
In [17]: import numpy as np In [18]: a = np.array([2,3,4]) In [19]: a Out[19]: array([2, 3, 4])
In [21]: a = np.arange(10,30,5) ##(10 ,30 是指定範圍,5步長,步長支持小數) In [22]: a Out[22]: array([10, 15, 20, 25]) In [23]: a = np.arange(10,30,0.5) In [24]: a Out[24]: array([ 10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5, 20. , 20.5, 21. , 21.5, 22. , 22.5, 23. , 23.5, 24. , 24.5, 25. , 25.5, 26. , 26.5, 27. , 27.5, 28. , 28.5, 29. , 29.5])
In [25]: a = np.linspace(0,2,9) ## 將【0,2】分紅九份 In [26]: a Out[26]: array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
In [28]: a = np.zeros((3,2),dtype=np.int64) #第一個參數是元祖,代表建立個幾行幾列的數據 # dtype 表示數據類型 In [29]: a Out[29]: array([[0, 0], [0, 0], [0, 0]])
empty
內容是隨機的而且取決於存儲器的狀態。默認狀況下,建立的數組的dtype爲float64
。)ndarray基本屬性:spa
shape
將是(n,m)
。所以,shape
元組的長度就是rank或維度的個數ndim
。
shape
的元素的乘積。
float64
類型的數組的itemsize
爲8(=64/8),而complex32
類型的數組的comitemsize
爲4(=32/8)。它等於ndarray.dtype.itemsize
。
數組和標量之間的運算code
a+1 a*3 1//a a**0.5orm
一樣大小數組之間的運算對象
In [30]: a = np.array([20,30,40,50]) In [31]: b = np.arange(4) In [32]: a Out[32]: array([20, 30, 40, 50]) In [33]: b Out[33]: array([0, 1, 2, 3]) In [34]: c = a - b In [35]: c Out[35]: array([20, 29, 38, 47])
乘法運算符*
的運算在NumPy數組中是元素級別的。
可使用dot
函數或方法執行矩陣乘積:
In [36]: a Out[36]: array([20, 30, 40, 50]) In [37]: b Out[37]: array([0, 1, 2, 3]) In [38]: a*b Out[38]: array([ 0, 30, 80, 150])
In [39]: a.dot(b)
Out[39]: 260
###矩陣乘法複習:
默認狀況下,這些操做適用於數組,就像它是一個數字列表,而無論其形狀。可是,經過指定axis
參數,你能夠沿着數組的指定軸應用操做:
>>> b = np.arange(12).reshape(3,4) >>> b array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> >>> b.sum(axis=0) # sum of each column array([12, 15, 18, 21]) >>> >>> b.min(axis=1) # min of each row array([0, 4, 8]) >>> >>> b.cumsum(axis=1) # cumulative sum along each row(每一個數和這個數以前全部數的和) array([[ 0, 1, 3, 6], [ 4, 9, 15, 22], [ 8, 17, 27, 38]])
通用函數:能同時對數組中全部元素進行運算的函數
常見通用函數:
索引、切片和迭代:
一維數組索引:(和列表幾乎差很少)
In [49]: a Out[49]: array([20, 30, 40, 50]) In [50]: a[1] Out[50]: 30
二維/多維數組索引
In [51]: b Out[51]: array([[ 1, 2, 3, 4], [10, 11, 12, 13]]) In [52]: b[1][2] Out[52]: 12 In [53]: b[1,2]. #推薦這種 Out[53]: 12
布爾型索引:將一樣大小的布爾數組傳進索引,會返回一個由全部True對應位置的元素的數組
In [59]: b Out[59]: array([[ 1, 2, 3, 4], [10, 11, 12, 13]]) In [60]: b<5 Out[60]: array([[ True, True, True, True], [False, False, False, False]], dtype=bool) In [61]: b[b<5] Out[61]: array([1, 2, 3, 4])
花式索引:(索引的值也是索引)
例:對一個二維數組,選出其第一列和第三列,組成新的二維數組。
In [64]: b Out[64]: array([[ 1, 2, 3, 4], [10, 11, 12, 13]]) In [65]: c = b[:,[1,3]] ##(裏面的【1,3】指的是第1和3列) In [66]: c Out[66]: array([[ 2, 4], [11, 13]])
切片:
In [67]: a Out[67]: array([20, 30, 40, 50]) In [68]: a[1:3] Out[68]: array([30, 40]) In [71]: b = np.arange(20).reshape(4,5) In [72]: b Out[72]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) In [73]: b[1:3] Out[73]: array([[ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
與列表不一樣,數組切片時並不會自動複製,在切片數組上的修改會影響原數組。 【解決方法:copy()】
In [74]: a Out[74]: array([20, 30, 40, 50]) In [75]: c = a[1:3] In [76]: c Out[76]: array([30, 40]) In [77]: c[0] = 11 In [78]: c Out[78]: array([11, 40]) In [79]: a Out[79]: array([20, 11, 40, 50]) In [80]: c = a[1:3].copy() In [82]: c Out[82]: array([11, 40]) In [83]: c[0] = 99 In [84]: c Out[84]: array([99, 40]) In [85]: a Out[85]: array([20, 11, 40, 50])
In [122]: b
Out[122]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [123]: c = b[1:3,1:3]
In [124]: c
Out[124]:
array([[ 6, 7],
[11, 12]])
經常使用函數: