Numpy基礎學習

  Numpy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。python

  主要的功能:數組

    一、ndarray,一個具備矢量運算和複雜廣播工能的快速且節省空間的多維數組less

    二、用於對整組數據進行快速運算的標準數據函數(無需編寫循環)ide

    三、用於讀寫磁盤數據的工具以及用於操做內存映射文件的工具函數

    四、線性代數、隨機數生成以及傅里葉變換功能工具

    五、用於集成由C、C++、Fortran等語言編寫的代碼的工具性能

  1、Numpy的ndarray:一種多維數組對象、大數據

    numpy最重要的特色:ui

      一、其N維數組對象(ndarray)spa

      二、是一個快速靈活的大數據容器

      三、能夠利用這種數組對整塊數據進行數學運算,其語法和標量元素之間的運算同樣

      四、ndarray中的全部元素必須是相同類型的。每一個數組都有一個shape(表示各維度大小的元祖)和dtype(說明數組數據的對象)

  1.1 ndarray的建立 

 1 import numpy as np
 2 
 3 data = [1,2,3,4]
 4 '''
 5 array([1, 2, 3, 4])
 6 '''
 7 arr = np.array(data)
 8 
 9 #1
10 arr.ndim  # 數組維度
11 
12 #(4,)
13 arr.shape  # 數組各維度大小的元祖
 1 import numpy as np
 2 
 3 #額外能建立ndarray的方法
 4 
 5 np.zeros(10)  # 建立指定長度形狀的數組, 全0
 6 np.zeros((3,2))
 7 np.zeros((1,2,3))
 8 
 9 np.ones()   # 建立指定長度形狀的數組, 全1
10 
11 np.empty((2,3,2))  # 建立沒有任何具體值的數組

  1.2 ndarray的數據類型

    Numpy的數據類型

類型 說明
int八、uint8 有符號和無符號的8位(一個字節)整型
int1六、uint16 有符號和無符號的16位(兩個個字節)整型
int3二、uint32 有符號和無符號的32位(三個字節)整型
int6四、uint64 有符號和無符號的64位(四個字節)整型
float16 半精度浮點數
float32 標準的單精度浮點數。與C的float兼容
float64 標準的雙精度浮點數。與C的double和Python的float對象兼容
float128 擴展精度浮點數
complex6四、complex128 分別用兩個32位 、64位或128位浮點數表示的複數
bool           存儲Ture和Flase值的布爾類型
object Python對象類型
String_   固定長度的字符串類型
Unicode_ 固定長度的Unicode類型(字節數由平臺決定)

    dtype是一個特殊的對象,它含有ndarray將一塊內存解釋爲特定數據類型所需的信息。

1 import numpy  as np
2 
3 arr = np.array([1,2,3], dtype=np.float64)
4 arr.dtype
5 
6 arr.astype(np.float32)  # 轉換爲dtype

  2、數組和標量之間的運算

    大小相等的數組之間的任何算術運算都會將運算應用到元素級別

 1 import numpy as np
 2 
 3 arr1 = np.array([[1,2,3],[3,4,5]])
 4 arr2 = np.array([[6,7,8],[9,10,11]])
 5 
 6 '''
 7 array([[ 7,  9, 11],
 8        [12, 14, 16]])
 9 '''
10 arr1 + arr2
11 
12 
13 '''
14 array([[-5, -5, -5],
15        [-6, -6, -6]])
16 '''
17 arr1 - arr2
18 
19 '''
20 array([[ 6, 14, 24],
21        [27, 40, 55]])
22 '''
23 arr1 * arr2
24 
25 '''
26 array([[ 0.16666667,  0.28571429,  0.375     ],
27        [ 0.33333333,  0.4       ,  0.45454545]])
28 '''
29 arr1 / arr2

    不一樣大小的數組之間的運算叫作廣播(broadcasting)會在後面的內容中單獨講,自己是一個很是重要的概念

  3、基本的索引和切片 

    一維數組的索引和切片和Python列表的功能差很少,這裏只作簡單的舉例,不作更多說明。

    區別的地方須要單獨說明:一、在numpy的數組中,若是你將一個標量值賦值給一個切片時,例如arr[3:4] = 8,該值就會自動賦值給這個切片選區中,即(3,4]位置上的值都變成8;二、numpy中數組的切片時原始數組的視圖,數據不會被複制,視圖上的任何修改都會直接反應到原數組上。

 1 import numpy as np
 2 
 3 arr = np.array([1,2,3,4,5,6])
 4 
 5 arr[2,4] = 44
 6 
 7 '''
 8 array([1,2,44,44,5,6])
 9 '''
10 print(arr)

 

    二維數組中,各個索引位置上的元素再也不是標量而是一維數組,依次類推多維也是這樣

import numpy as np

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

'''
array([3,4,5])
'''
arr2d[2]

arr2d[0][2]  # 等價於 arr2d[0,2]

    二維數組的索引方式:縱軸表示 axis0,橫軸表示axis1

    ndarray的切片語法跟Python列表這樣的一維對象差很少,在多維度上也是同樣的,可是咱們須要記住各個索引位置的元素再也不是標量二維一維數組

1 import numpty as np
2 
3 arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
4 
5 '''
6 array([[1,2,3],[2,3,4]])
7 '''
8 arr[:2]
1 import numpty as np
2  
3 arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
4  
5 '''
6 array([[1],[2]])
7 '''
8 arr[:2,:,1]

  4、布爾型索引

    能夠對ndarray中的數據作布爾類型的判斷截取

 1 import numpy as np
 2 
 3 arr = np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]])
 4 
 5 '''
 6 array([4, 5, 4, 5, 6, 4, 5, 6, 7])
 7 '''
 8 arr[arr > 3]
 9 
10 '''
11 array([3, 3, 3])
12 '''
13 arr[arr == 3]
14 
15 '''
16 array([1, 2, 2])
17 '''
18 arr[arr < 3]

   5、花式索引

    花式索引(Fancy indexing)是一個Numpy術語,它指的是利用整數數組進行索引。

    爲了以特定順序選取行子集,只須要傳入一個用於指定順序的整數列表或者ndarray,如下爲例子:

 1 import numpy as np
 2 
 3 '''
 4 array([[ 0.,  0.,  0.,  0.],
 5        [ 1.,  1.,  1.,  1.],
 6        [ 2.,  2.,  2.,  2.],
 7        [ 3.,  3.,  3.,  3.],
 8        [ 4.,  4.,  4.,  4.],
 9        [ 5.,  5.,  5.,  5.],
10        [ 6.,  6.,  6.,  6.],
11        [ 7.,  7.,  7.,  7.]])
12 '''
13 arr
14 
15 '''
16 array([[ 4.,  4.,  4.,  4.],
17        [ 3.,  3.,  3.,  3.],
18        [ 0.,  0.,  0.,  0.],
19        [ 6.,  6.,  6.,  6.]])
20 '''
21 arrr[[4,3,0,6]]  # 傳入了指定順序的整數列,4,3,0,6是順序
22 
23 arr[[-1,-2,-5]]  # 負數從尾部開始取,順序

    一次傳入多個索引數組的狀況,如下爲實例:

 1 import numpy as np
 2 
 3 '''
 4 array([[ 0,  1,  2,  3],
 5        [ 4,  5,  6,  7],
 6        [ 8,  9, 10, 11],
 7        [12, 13, 14, 15],
 8        [16, 17, 18, 19],
 9        [20, 21, 22, 23],
10        [24, 25, 26, 27],
11        [28, 29, 30, 31]])
12 '''
13 arr = np.arange(32).reshape((8,4))
14 
15 '''
16 array([4,23,29,10])
17 '''
18 arr[[1,5,7,2],[0,3,1,2]]  #最終取出的數據是 座標(1,0)(5,3)(7,1)(2,2)
19 
20 '''
21 array([[ 4,  7,  5,  6],
22        [20, 23, 21, 22],
23        [28, 31, 29, 30],
24        [ 8, 11,  9, 10]])
25 '''
26 arr[[1,5,7,2]][:,[0,3,1,2]]  # 獲取矩形區域
27 
28 '''
29 np.ix()  將兩個一維整數數組轉換爲一個用於選取方形區域的索引器
30 '''
31 arr[np.ix([1,5,7,2],[0,3,1,2])]  # 獲得和上面同樣的結果

  6、經常使用一元函數

函數 說明
abs、fabs 計算整數、浮點數或複數的絕對值。對於非複數值,可使用更快的fabs
sqrt   計算各元素的平方根。至關於arr**0.5
square 計算各元素的平方。至關於arr**2
exp 計算各元素的指數
log log10 log2 log1p 分別爲天然對數(底數爲e)、底數爲10的log、底數爲2的log 、 log(1+x)
sign 計算各元素的正負號:1正數,0零,-1負數
ceil   計算各元素的ceiling值,即大於等於該值的最小整數
floor  計算各元素的floor值,即小於等於該值的最大整數
rint 將各元素值四捨五入到最接近的整數,保留dtype
modf 將數組的小數和整數部分以兩個獨立數組的形式返回
isnan 返回一個表示NAN的布爾型數組
isfinite    isinf 分別返回一個表示,那些元素是有窮的 或者 哪些元素是無窮的 布爾類型數組
cos  cosh  sin  sinh 普通型和雙曲型三角函數

arccos arccosh arcsin

arcsinh  arctan  arctanh

反三角函數
logical_not 計算各元素not x的真值。至關於-arr

  7、二元經常使用函數

函數 說明
add 將數組中對應的元素相加
subtract 從第一個數組中減去第二個數組中的元素
multiply 數組元素相乘
divide、floor_divide 除法或向下圓除法
power 對第一個數組中的元素A,根據第二個數組中的相應元素B,計算AB
maximum、fmax 計算元素級的最大值  fmax將忽略NaN
minimum、fmin 計算元素級的最小值計算  fmin將忽略NaN 
mod 元素級的求模計算(除法的餘數)
copysign 將第二個數組中的值的符號複製給第一個數組中的值

greater、greater_equal

less、less_equal

equal、not_equal

執行元素級的比較運算,最終產生布爾型數組。至關於>  >= <=

< == !=

logical_and logical_or

logical_xor

執行元素級的真值邏輯運算。至關於& | ^

  8、基本數組統計方法

方法 說明
sum 對數組中所有或某軸向的元素求和。零長度的數組和sum爲0
mean 算術平均數。零長度的數組的mean爲NAN
std、var 分別爲標準差和方差,自由度可調(默認爲n)
min、max 最大值和最小值
argmin、argmax 分別爲最大和最小元素的索引
cumsum 全部元素的累計和
comprod 全部元素的累計積

    做爲布爾類型數組的方法

    arr.any()  數組中是否存在一個或多個True

    arr.all()  數組中是否全部的值都爲True

    排序:arr.sort()  返回排序後的數組

  9、數組的集合運算

方法 說明
unique(x) 計算x中的惟一元素,並返回有序結果
intersect1d(x,y) 計算x和y中的公共元素,並返回有序結果
union1d(x,y) 計算x和y的並集,並返回有序結果
in1d(x,y) 獲得一個表示‘x的元素是包含於y’的布爾數組
setdiff1d(x,y) 集合的差,即元素在x中且不在y中
setxor1d(x,y) 集合的對稱差,即存在於一個數組中單不一樣時存在於兩個數組中的元素

 

 

 

 

 

內容參考自《利用Python進行數據分析》

相關文章
相關標籤/搜索