Numpy(Numeric Python)提供了許多高級的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運算庫。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。
下面從數(shù)組的創(chuàng)建,隨機(jī)數(shù)的生成,下標(biāo)索引,維度的查看及改變等方面認(rèn)識Numpy-數(shù)組。
#創(chuàng)建一維數(shù)組
import numpy as np #導(dǎo)入 NumPy 庫
arr1 = np.array([1, 2, 3, 4]) #創(chuàng)建一維數(shù)組
print(' 創(chuàng)建的數(shù)組為: ',arr1)
創(chuàng)建的數(shù)組為: [1 2 3 4]
# 創(chuàng)建二維數(shù)組
arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
print('創(chuàng)建的數(shù)組為:\n',arr2)
創(chuàng)建的數(shù)組為:
[[ 1 2 3 4]
[ 4 5 6 7]
[ 7 8 9 10]]
#查看數(shù)組屬性值
print('數(shù)組類型為:',arr2.dtype) #查看數(shù)組類型
數(shù)組類型為: int32
print('數(shù)組元素個數(shù)為:',arr2.size) #查看數(shù)組元素個數(shù)
數(shù)組元素個數(shù)為: 12
print('數(shù)組每個元素大小為:',arr2.itemsize) #查看數(shù)組每個元素大小
數(shù)組每個元素大小為: 4
#重新設(shè)置數(shù)組的維度
arr2.shape = 4,3 #重新設(shè)置維度
print('重新設(shè)置維度后的arr2 為:',arr2)
重新設(shè)置維度后的arr2 為: [[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
#創(chuàng)建數(shù)組的方式
print('使用arange函數(shù)創(chuàng)建的數(shù)組為:\n',np.arange(0,1,0.1))#0~0.9步長為0.1的等差數(shù)列
使用arange函數(shù)創(chuàng)建的數(shù)組為:
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
print('使用linspace函數(shù)創(chuàng)建的數(shù)組為:\n:',np.linspace(0, 1, 10))#0~1內(nèi)等差數(shù)列
使用linspace函數(shù)創(chuàng)建的數(shù)組為:
: [0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
0.66666667 0.77777778 0.88888889 1. ]
print('使用logspace函數(shù)創(chuàng)建的數(shù)組為:\n',np.logspace(0, 1, 10))#1~10的一次方內(nèi)等比數(shù)列
使用logspace函數(shù)創(chuàng)建的數(shù)組為:
[ 1. 1.29154967 1.66810054 2.15443469 2.7825594 3.59381366
4.64158883 5.9948425 7.74263683 10. ]
print('使用zeros函數(shù)創(chuàng)建的數(shù)組為:\n',np.zeros((2,3)))#零矩陣
使用zeros函數(shù)創(chuàng)建的數(shù)組為:
[[0. 0. 0.]
[0. 0. 0.]]
print('使用eye函數(shù)創(chuàng)建的數(shù)組為:\n',np.eye(3))#單位矩陣
使用eye函數(shù)創(chuàng)建的數(shù)組為:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
print('使用diag函數(shù)創(chuàng)建的數(shù)組為:\n',np.diag([1,2,3,4]))#對角矩陣
使用diag函數(shù)創(chuàng)建的數(shù)組為:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
print('使用ones函數(shù)的數(shù)組為:\n',np.ones((5,3)))#1矩陣
使用ones函數(shù)的數(shù)組為:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
# 轉(zhuǎn)換數(shù)據(jù)類型
print('轉(zhuǎn)換結(jié)果為:',np.float64(10)) #整型轉(zhuǎn)換為浮點型
轉(zhuǎn)換結(jié)果為: 10.0
print('轉(zhuǎn)換結(jié)果為:',np.int8(10.0)) #浮點型轉(zhuǎn)換為整型
轉(zhuǎn)換結(jié)果為: 10
print('轉(zhuǎn)換結(jié)果為:',np.bool(10)) #整型轉(zhuǎn)換為布爾型
轉(zhuǎn)換結(jié)果為: True
print('轉(zhuǎn)換結(jié)果為:',np.bool(0)) #整型轉(zhuǎn)換為布爾型
轉(zhuǎn)換結(jié)果為: False
print('轉(zhuǎn)換結(jié)果為:',np.float(True)) #布爾型轉(zhuǎn)換為浮點型
轉(zhuǎn)換結(jié)果為: 1.0
print('轉(zhuǎn)換結(jié)果為:',np.float(False)) #布爾型轉(zhuǎn)換為浮點型
轉(zhuǎn)換結(jié)果為: 0.0
# 數(shù)據(jù)類型
df = np.dtype([("name", np.str_, 40), ("numitems", np.int64),
("price",np.float64)])
print('數(shù)據(jù)類型為:',df)
數(shù)據(jù)類型為: [('name', '<U40'), ('numitems', '<i8'), ('price', '<f8')]
print('數(shù)據(jù)類型為:',df["numitems"])
數(shù)據(jù)類型為: int64
print('數(shù)據(jù)類型為:',np.dtype(df["numitems"]))
數(shù)據(jù)類型為: int64
# 隨機(jī)數(shù)
print('生成的隨機(jī)數(shù)組為:\n',np.random.random(100))#0~1之間的浮點數(shù)
生成的隨機(jī)數(shù)組為:
[8.45247163e-01 8.04961236e-01 4.61629100e-01 6.60481056e-01
8.85688953e-01 7.92505304e-01 6.84714900e-01 6.34226585e-01
8.20931780e-01 3.34055152e-01 7.20978384e-01 3.74890972e-01
9.89532417e-01 4.16347259e-01 2.42102254e-01 6.61382437e-01
4.81353414e-01 9.02105584e-01 4.02486538e-01 2.65695021e-01
1.47966508e-01 1.14844259e-01 4.84830607e-01 6.18340708e-01
7.76143270e-01 4.82649768e-01 9.28718489e-01 4.14964185e-01
4.68781154e-01 1.81361248e-01 2.76627027e-01 6.39671817e-01
6.62330659e-01 8.11416506e-01 7.77777655e-01 3.22008857e-01
4.89123991e-01 9.29301696e-01 8.06684663e-01 9.82265016e-01
9.13282612e-01 6.49882735e-01 2.02874844e-01 3.05527821e-01
4.24297211e-01 4.16389231e-01 7.04391535e-01 4.99023359e-01
5.88470538e-01 7.38298384e-01 3.68054772e-01 1.59033896e-01
5.82120938e-01 3.71144145e-01 1.93509476e-01 6.06574724e-01
6.11538706e-02 5.78425437e-01 7.34466790e-01 1.21817500e-01
8.59708037e-01 4.00729070e-01 4.44967775e-01 7.27739695e-01
2.61229858e-01 1.70732866e-01 5.96511175e-01 6.75143973e-01
5.41266836e-01 1.83114421e-01 7.58738714e-04 4.30872768e-01
5.20699554e-01 4.63038120e-01 5.25177320e-01 7.06495083e-01
4.66429035e-01 6.38014308e-01 8.14504474e-02 2.70856520e-01
9.92215242e-01 7.13024171e-01 4.94373814e-01 3.02776512e-01
5.63768564e-01 5.89210265e-01 5.73322187e-01 4.24810060e-01
3.66895265e-01 1.47066063e-01 9.51866724e-01 1.75349586e-01
5.68228734e-01 9.23077343e-02 5.74306533e-01 1.15063710e-01
1.27975927e-01 3.45100855e-01 3.49098592e-01 6.60094569e-01]
print('生成的隨機(jī)數(shù)組為:\n',np.random.rand(10,5))#均勻分布
生成的隨機(jī)數(shù)組為:
[[0.25922467 0.76808373 0.63684366 0.51578544 0.53421494]
[0.72365342 0.48093336 0.83422115 0.88113483 0.17132812]
[0.23065314 0.94135655 0.05371515 0.44028687 0.50151535]
[0.76408248 0.27500197 0.14867752 0.26470363 0.74286716]
[0.33755793 0.95879839 0.15080796 0.53588816 0.78339816]
[0.90092235 0.22243242 0.07556453 0.37230141 0.37591385]
[0.08799716 0.08463172 0.18019147 0.63993616 0.45510651]
[0.76824 0.11750074 0.53298314 0.35589531 0.59611092]
[0.88556225 0.5523454 0.97087332 0.14286531 0.77582827]
[0.11253834 0.87919561 0.21009431 0.08901257 0.35540301]]
print('生成的隨機(jī)數(shù)組為:\n',np.random.randn(10,5))#標(biāo)準(zhǔn)正態(tài)分布
生成的隨機(jī)數(shù)組為:
[[ 0.53907684 0.09398254 0.08682753 -0.20524631 0.6739524 ]
[ 0.01369997 -0.51383784 -0.10402955 -0.74558861 -0.9431707 ]
[ 1.54475275 -0.58967622 -0.17420901 0.06108461 0.28348128]
[ 0.20715056 -2.31514807 -0.86914422 -0.10865683 -1.03440973]
[-0.46250783 1.2075892 0.08250644 -1.08742328 -0.78728038]
[-1.30812596 1.35982432 1.32917884 1.15947257 0.76195138]
[ 0.80697121 0.66593556 -0.77120651 0.01326571 0.03444282]
[ 0.59012534 -0.09921907 0.43749378 -0.40498069 0.87905421]
[ 0.37076441 -0.3669176 -1.81459462 2.52145125 -1.14426121]
[-0.69042699 0.25140031 1.06545396 0.25672359 0.08348101]]
print('生成的隨機(jī)數(shù)組為:\n',np.random.randint(2,10,size = [2,5]))#整數(shù)
生成的隨機(jī)數(shù)組為:
[[4 3 3 2 6]
[5 3 4 7 7]]
#下標(biāo)索引
arr = np.arange(10)
arr
Out[91]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#用整數(shù)作為下標(biāo)可以獲取數(shù)組中的某個元素
print('索引結(jié)果為:',arr[5])#獲取下標(biāo)為5的元素,python下標(biāo)從0開始
索引結(jié)果為: 5
print('索引結(jié)果為:',arr[3:5])#用范圍作為下標(biāo)獲取數(shù)組的一個切片,含前不含后,包括arr[3]不包括arr[5]
索引結(jié)果為: [3 4]
print('索引結(jié)果為:',arr[:5]) #省略開始下標(biāo),表示從arr[0]開始
索引結(jié)果為: [0 1 2 3 4]
print('索引結(jié)果為:',arr[-1])#下標(biāo)可以使用負(fù)數(shù),-1表示從數(shù)組后往前數(shù)的第一個元素
索引結(jié)果為: 9
print('索引結(jié)果為:',arr[:-1])
索引結(jié)果為: [0 1 2 3 4 5 6 7 8]
arr[2:4] = 100,101#下標(biāo)還可以用來修改元素的值
print('索引結(jié)果為:',arr)
索引結(jié)果為: [ 0 1 100 101 4 5 6 7 8 9]
print('索引結(jié)果為:',arr[1:-1:2])#范圍中的第三個參數(shù)表示步長,2表示隔一個元素取一個元素
索引結(jié)果為: [ 1 101 5 7]
print('索引結(jié)果為:',arr[5:1:-2]) #步長為負(fù)數(shù)時,開始下標(biāo)必須大于結(jié)束下標(biāo)
索引結(jié)果為: [ 5 101]
arr = np.array([[1, 2, 3, 4, 5],[4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])
print('創(chuàng)建的二維數(shù)組為:\n',arr)
創(chuàng)建的二維數(shù)組為:
[[ 1 2 3 4 5]
[ 4 5 6 7 8]
[ 7 8 9 10 11]]
print('索引結(jié)果為:\n',arr[0,3:5]) #索引第0行中第4和第5列的元素
索引結(jié)果為:
[4 5]
print('索引結(jié)果為:\n',arr[1:,2:]) #索引第2和第3行中第3列、第4列和第5列的元素
索引結(jié)果為:
[[ 6 7 8]
[ 9 10 11]]
print('索引結(jié)果為:\n',arr[:,2]) #索引第3列的元素
索引結(jié)果為:
[3 6 9]
print('索引結(jié)果為:',arr[[(0,1,2),(1,2,3)]]) #從兩個序列的對應(yīng)位置取出兩個整數(shù)組成下標(biāo):arr[0,1], arr[1,2], arr[2,3]
索引結(jié)果為: [ 2 6 10]
print('索引結(jié)果為:',arr[1:,(0,2,3)]) #索引第2、3行中第1、3、4列的元素
索引結(jié)果為: [[ 4 6 7]
[ 7 9 10]]
mask = np.array([1,0,1],dtype = np.bool)
print('索引結(jié)果為:',arr[mask,2])#mask是一個布爾數(shù)組,它索引第1、3行中第3列的元素
索引結(jié)果為: [3 9]
#數(shù)組維度
arr = np.arange(12).reshape(3,4)
print('創(chuàng)建的二維數(shù)組為:\n',arr)
創(chuàng)建的二維數(shù)組為:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print('數(shù)組維度為:\n',arr.ndim)#數(shù)組的維度
數(shù)組維度為:
2
數(shù)組展平后為:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
print('數(shù)組展平后為:\n',arr.ravel())#展平
print('數(shù)組展平為:\n',arr.flatten()) #橫向展平
數(shù)組展平為:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
print('數(shù)組展平為:\n',arr.flatten('F')) #縱向展平
數(shù)組展平為:
[ 0 4 8 1 5 9 2 6 10 3 7 11]
創(chuàng)建的數(shù)組1為:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print('創(chuàng)建的數(shù)組1為:\n',arr1)
arr2 = arr1*3
print('創(chuàng)建的數(shù)組2為:',arr2)
創(chuàng)建的數(shù)組2為: [[ 0 3 6 9]
[12 15 18 21]
[24 27 30 33]]
橫向組合為: [[ 0 1 2 3 0 3 6 9]
[ 4 5 6 7 12 15 18 21]
[ 8 9 10 11 24 27 30 33]]
print('橫向組合為:',np.concatenate((arr1,arr2),axis = 1)) #concatenate函數(shù)橫向組合
縱向組合為: [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[ 0 3 6 9]
[12 15 18 21]
[24 27 30 33]]
橫向組合為: [[ 0 1 2 3 0 3 6 9]
[ 4 5 6 7 12 15 18 21]
[ 8 9 10 11 24 27 30 33]]
print('縱向組合為:',np.concatenate((arr1,arr2),axis = 0)) #concatenate函數(shù)縱向組合
縱向組合為: [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[ 0 3 6 9]
[12 15 18 21]
[24 27 30 33]]
arr = np.arange(16).reshape(4,4)
print('創(chuàng)建的二維數(shù)組為:',arr)
創(chuàng)建的二維數(shù)組為: [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
橫向分割為: [array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
print('橫向分割為:',np.hsplit(arr, 2)) #hsplit函數(shù)橫向分割
print('縱向分割為:',np.vsplit(arr, 2)) #vsplit函數(shù)縱向分割
縱向分割為: [array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
橫向分割為: [array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
print('橫向分割為:',np.split(arr, 2, axis=1)) #split函數(shù)橫向分割
print('縱向分割為:',np.split(arr, 2, axis=0)) #split函數(shù)縱向分割
縱向分割為: [array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]