Numpy是Python的一個科學計算的庫,提供了矩陣運算的功能,其通常與Scipy、matplotlib一塊兒使用。其實,list已經提供了相似於矩陣的表示形式,不過numpy爲咱們提供了更多的函數。若是接觸過matlab、scilab,那麼numpy很好入手。python
NumPy函數庫中存在兩種不一樣的數據類型(矩陣matrix和數組array),均可以用於處理行列表示的數字元素。調用mat()函數能夠將數組轉化爲矩陣,輸入命令以下:數組
np.mat(np.random.rand(1,4))
pip install numpy數據結構
在NumPy中,維度稱之爲axis
(複數是axes
),維度的數量稱之爲rank
。dom
(通用作法import numpu as np 簡單輸入)機器學習
NumPy的數組類是ndarray
,它有一個別名是 numpy.array
,但這與Python標準庫的array.array
並不同。後者僅僅是一個一維數組。而ndarray
具備如下的屬性:函數
ndarray.ndim
:數組的維數。在Python世界中,維數稱之爲rank
ndarray.shape
:數組的維度。這是一系列數字,長度由數組的維度(ndim
)決定。例如:長度爲n的一維數組的shape
是n。一個n行m列的矩陣的shape
是n,mndarray.size
:數組中全部元素的數量ndarray.dtype
:數組中元素的類型,例如numpy.int32
, numpy.int16
或者numpy.float64
ndarray.itemsize
:數組中每一個元素的大小,單位爲字節ndarray.data
:存儲數組元素的緩衝。一般咱們只須要經過下標來訪問元素,而不須要訪問緩衝np.array([1,2,3,4])
np.array((1.2,2,3,4))
np.array(((1,2,3),(4,5,6)))
np.array([[1,2,3],[4,5,6]])
np.array([[1,2],[3,4]], dtype=complex )
numeric_strings2 = np.array(['1.23','2.34','3.45'],dtype=np.string_) print(numeric_strings2) [b'1.23' b'2.34' b'3.45'] t=numeric_strings2.astype(float) print(t) [ 1.23 2.34 3.45]
x=np.array(((1,2,3,4),(5,6,7,8),(9,10,11,12))) y=x[:,1] y[0]=20 print(y) print(x)
結果:性能
經過上面能夠發現改變y會改變x ,於是咱們能夠推斷,y和x指向是同一塊內存空間值,系統沒有爲y 新開闢空間把x值賦值過去。學習
arr = np.arange(10) arr[3:6]=10 print(arr)
結果:大數據
思考爲何這麼設計? Numpy 設計是爲了處理大數據,若是切片採用數據複製話會產生極大的性能和內存消耗問題。spa
arr = np.arange(10) arr_copy = arr[3:6].copy() print(arr_copy) arr_copy[:]=24 print(arr_copy) print(arr)
結果:
l=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] l[5:8] = 12 #報錯 TypeError: can only assign an iterable print(l) l1= l[5:8] print(l1) l1[0]=12 print(l1) print(l)
結果:
arr2d = np.arange(1,10).reshape(3,3) print(arr2d) print(arr2d[2]) print(arr2d[0][2]) print(arr2d[0,2])
結果:
a = np.array([[1,0],[2,3]]) print(a) print() print(a.transpose())
結果:
除了生成數組以外,當咱們已經持有某個數據以後,咱們可能會須要根據已有數組來產生一些新的數據結構,這時候咱們能夠使用下面這些函數:
reshape
:根據已有數組和指定的shape,生成一個新的數組vstack
:用來將多個數組在垂直(v表明vertical)方向拼接(數組的維度必須匹配)hstack
:用來將多個數組在水平(h表明horizontal)方向拼接(數組的維度必須匹配)hsplit
:用來將數組在水平方向拆分vsplit
:用來將數組在垂直方向拆分
在實際上的項目工程中,咱們經常會須要一些特定的數據,NumPy中提供了這麼一些輔助函數:
zeros
:用來建立元素所有是0的數組ones
:用來建立元素所有是1的數組empty
:用來建立未初始化的數據,所以是內容是不肯定的arange
:經過指定範圍和步長來建立數組linespace
:經過指定範圍和元素數量來建立數組random
:用來生成隨機數
參考: