Python 機器學習庫 NumPy 教程

0 Numpy簡單介紹

Numpy是Python的一個科學計算的庫,提供了矩陣運算的功能,其通常與Scipy、matplotlib一塊兒使用。其實,list已經提供了相似於矩陣的表示形式,不過numpy爲咱們提供了更多的函數。若是接觸過matlab、scilab,那麼numpy很好入手。python

NumPy函數庫中存在兩種不一樣的數據類型(矩陣matrix和數組array),均可以用於處理行列表示的數字元素。調用mat()函數能夠將數組轉化爲矩陣,輸入命令以下:數組

np.mat(np.random.rand(1,4))

1 安裝

pip install numpy數據結構

在NumPy中,維度稱之爲axis(複數是axes),維度的數量稱之爲rankdom

(通用作法import numpu as np 簡單輸入)機器學習

2 多維數組

NumPy的數組類是ndarray,它有一個別名是 numpy.array,但這與Python標準庫的array.array並不同。後者僅僅是一個一維數組。而ndarray具備如下的屬性:函數

  • ndarray.ndim:數組的維數。在Python世界中,維數稱之爲rank
  • ndarray.shape:數組的維度。這是一系列數字,長度由數組的維度(ndim)決定。例如:長度爲n的一維數組的shape是n。一個n行m列的矩陣的shape是n,m
  • ndarray.size:數組中全部元素的數量
  • ndarray.dtype:數組中元素的類型,例如numpy.int32numpy.int16或者numpy.float64
  • ndarray.itemsize:數組中每一個元素的大小,單位爲字節
  • ndarray.data:存儲數組元素的緩衝。一般咱們只須要經過下標來訪問元素,而不須要訪問緩衝

以list或tuple變量爲參數產生一維數組:

np.array([1,2,3,4]) 

np.array((1.2,2,3,4))  

以list或tuple變量爲元素產生二維數組或者多維數組:

np.array(((1,2,3),(4,5,6)))  

np.array([[1,2,3],[4,5,6]])  

咱們也能夠在建立數組的時候,指定元素的類型,例如這樣:

np.array([[1,2],[3,4]], dtype=complex )

能夠使用astype轉換類型,在處理文件時候這個會很實用,注意astype 調用會返回一個新的數組,也就是原始數據的一份拷貝。

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]

3 numpy索引(index)與切片(slicing)

  • index 和slicing :第一數值相似數組橫座標,第二個爲縱座標;
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)

結果:

 

  • 再看下對list 切片修改(這裏設計到python 中深淺拷貝,其中切片屬於淺拷貝):
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)

結果:

 

4 多維數組索引(index)、切片(slicing)

arr2d = np.arange(1,10).reshape(3,3)
print(arr2d)
print(arr2d[2])
print(arr2d[0][2])
print(arr2d[0,2])

結果:

 

5 基本的矩陣運算

轉置:

a = np.array([[1,0],[2,3]])
print(a)
print()
print(a.transpose())

結果:

 

特徵值、特徵向量:

 

 

6 Shape與操做

除了生成數組以外,當咱們已經持有某個數據以後,咱們可能會須要根據已有數組來產生一些新的數據結構,這時候咱們能夠使用下面這些函數:

  • reshape:根據已有數組和指定的shape,生成一個新的數組
  • vstack:用來將多個數組在垂直(v表明vertical)方向拼接(數組的維度必須匹配)
  • hstack:用來將多個數組在水平(h表明horizontal)方向拼接(數組的維度必須匹配)
  • hsplit:用來將數組在水平方向拆分
  • vsplit:用來將數組在垂直方向拆分

7 特定array的建立

 

在實際上的項目工程中,咱們經常會須要一些特定的數據,NumPy中提供了這麼一些輔助函數:

  • zeros:用來建立元素所有是0的數組
  • ones:用來建立元素所有是1的數組
  • empty:用來建立未初始化的數據,所以是內容是不肯定的
  • arange:經過指定範圍和步長來建立數組
  • linespace:經過指定範圍和元素數量來建立數組
  • random:用來生成隨機數

 

參考:

numpy 基礎入門 - 30分鐘學會numpy 

Python 機器學習庫 NumPy 教程

相關文章
相關標籤/搜索