NumPy是Python語言的一個擴充程序庫 ,支持大量的維度數(shù)組與矩陣運算捎琐,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫 扮叨。numpy以及依賴它產(chǎn)生的pandas廣泛運用于數(shù)據(jù)分析和機器學習。
Numpy創(chuàng)建數(shù)據(jù):
import numpy as np
list_1 = [1,2,3]
array_1 = np.array([1,2,3],dtype='int')
print(array_1)
>>>[1 2 3]
#多維度
list_2 = [[1,2],[3,4]]
array_2 = np.array(list_2)
print(array_2)
>>>[[1 2]
[3 4]]
Numpy中的數(shù)組和列表有些相似之處 ,數(shù)組有多個維度 。dtype為可選參數(shù) ,修飾數(shù)組內(nèi)結(jié)構(gòu)
Numpy創(chuàng)建N維數(shù)組的api函數(shù)
import numpy as np
array_3 = np.array([1,2,3,4,5,6,7,8,9]).reshape((3,3))
print(array_3)
>>>[[1 2 3]
[4 5 6]
[7 8 9]]
array_4 = np.ones([5,5])
print(array_4)
>>>[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
array_5 = np.zeros([5,5])
print(array_5)
>>>[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
array_6 = np.random.randint(0,10,(4,3))
print(array_6)
>>>[[3 8 3]
[1 2 2]
[1 8 4]
[1 4 8]]
.reshape可以規(guī)定數(shù)組的維度 :(m,n)m行n列 秘通。ones填充數(shù)組所有元素為1 ,zeros填充數(shù)組所有元素為0 敛熬。random.randint(0,10,(4,3)) 函數(shù)隨機生成(0,10)四行三列數(shù)組肺稀。
Numpy的索引與切片:
array_7 = np.random.randint(0,10,(5,5))
print(array_7)
print(array_7[2,:]) #第三行所有元素
print(array_7[:,2]) #第三列所有元素
print(array_7[2,2]) #第三行第三列的元素
print(array_7[2,1:3]) #第三行的二到三列所有元素
print(array_7[1:3,2]) #第二到三行的三列所有元素
print(array_7[1:3,1:3]) #第二到三行的二到三列所有元素
>>>
[[3 5 9 0 4]
[0 3 0 7 9]
[0 4 3 0 7]
[9 8 4 0 5]
[3 0 8 8 5]]
[0 4 3 0 7]
[9 0 3 4 8]
3
[4 3]
[0 3]
[[3 0]
[4 3]]
Numpy的計算
便于我們更好的理解Numpy的計算 ,這里我們引入一個實例 :四六級成績 給出一個list 应民,有四位同學的四六級成績 话原。對于四級沒過的同學 诲锹,這里的六級成績我們?nèi)?繁仁。
取出score的value ,重新組合為新的列表 然后归园,將數(shù)組轉(zhuǎn)為array黄虱。
scroe = [{'老王':[444,369]},{'三毛':[333,0]},{'徐四':[578,496]},{'寶兒':[456,425]}]
scroes = []
for x in scroe:
for key,value in x.items():
scroes.append(value)
print(scroes)
array_8 = np.array(scroes)
print(array_8)
>>>[[444, 369], [333, 0], [578, 496], [456, 425]]
[[444 369]
[333 0]
[578 496]
[456 425]]
條件運算:
array_9 = np.array(scroes)
print(array_9>425) #返回
print(np.where(array_9 > 425, '合格', '不合格')) #三目運算
>>>[[ True False]
[False False]
[ True True]
[ True False]]
[['合格' '不合格']
['不合格' '不合格']
['合格' '合格']
['合格' '不合格']]
統(tǒng)計運算:
result_max_1 = np.amax(array_9,axis=1) #行內(nèi)的最大值
result_max_2 = np.amax(array_9,axis=0) #列內(nèi)的最大值
print(result_max_1)
print(result_max_2)
>>>[444 333 578 456]
[578 496]
result_min_1 = np.amin(array_9,axis=1) #行內(nèi)的最小值
result_min_2 = np.amin(array_9,axis=0) #列內(nèi)的最小值
print(result_min_1)
print(result_min_2)
>>>[369 0 496 425]
[333 0]
result_mean_1 = np.mean(array_9,axis=1) #行平均值 一個人四級六級平均成績
result_mean_2 = np.mean(array_9,axis=0) #列平均值 四個人四級、六級分別平均成績
print(result_mean_1)
print(result_mean_2)
>>>[406.5 166.5 537. 440.5]
[452.75 322.5 ]
result_std_1 = np.std(array_9,axis=1) #std方差
result_std_2 = np.std(array_9,axis=0)
print(result_std_1)
print(result_std_2)
>>>[ 37.5 166.5 41. 15.5]
[ 86.76800966 191.55743264]
數(shù)組運算:
print("origin array:" ,array_9)
array_9[:,0] = array_9[:,0]+5 #將所有人第一列四級的成績加五分
print("after the chage:",array_9)
print("origin array:" ,array_9)
array_9[:,1] = array_9[:,1]*0.5 #將所有人第二列六級級的成績減半
print("after the chage:",array_9)
>>>
origin array: [[444 369]
[333 0]
[578 496]
[456 425]]
after the chage: [[449 369]
[338 0]
[583 496]
[461 425]]
origin array: [[449 369]
[338 0]
[583 496]
[461 425]]
after the chage: [[449 184]
[338 0]
[583 248]
[461 212]]
矩陣運算:
np.dot()
規(guī)則:(M行, N列) * (N行, Z列) = (M行, Z列)
q = np.array([[0.4], [0.6]]) #array_9四行兩列 * q 二行一列 = 四行一列
result = np.dot(array_9, q)
print(result)
>>>[[399. ]
[133.2]
[528.8]
[437.4]]
矩陣合并:
qaaq = [425,425]
array_10 = np.array(qaaq)
print(array_10)
array_11 = np.vstack((array_9,array_10)) #vstack 垂直拼接 hstack水平拼接
print(array_11)
>>>[[444 369]
[333 0]
[578 496]
[456 425]
[425 425]]