1.NumPy概述
NumPy(Numerical Python)是用Python進行科學計算的基礎軟件包盟步。包含以下特點:
- 強大的N維數(shù)組對象Array
- 成熟的函數(shù)庫
- 用于集成C/C++和Fortran代碼的工具
- 實用的線性代數(shù)藏斩、傅立葉變換和隨機生成函數(shù)
2.NumPy安裝
pip install numpy或pip3 install numpy
3.NumPy引入
import numpy as np#為了方便實用numpy 采用np簡寫
4.NumPy方法
array=np.array([[1,2,3],[4,5,6]])#將列表轉(zhuǎn)換為矩陣 并轉(zhuǎn)換為int類型
print(array)
'''
[[1 2 3]
[4 5 6]]
'''
4.1NumPy屬性
print('array of dim:',array.ndim)#矩陣的維度
#array of dim:2
print('array of shape',array.shape)#矩陣的行數(shù)和列數(shù)
#array of shape:(2,3)
print('number of size:',array.size)#元素的個數(shù)
#number of size:6
4.2NumPy創(chuàng)建Array
- array:創(chuàng)建數(shù)組
- dtype:指定數(shù)據(jù)類型
- zeros:創(chuàng)建數(shù)據(jù)全為0
- ones:創(chuàng)建數(shù)據(jù)全為1
- empty:創(chuàng)建數(shù)據(jù)接近0
- arange:指定范圍內(nèi)創(chuàng)建數(shù)據(jù)
- linspace創(chuàng)建線段
創(chuàng)建數(shù)組
a=np.array([1,2,3])
print(a)
#[1,2,3]
指定數(shù)據(jù)dtype
a=np.array([1,2,3],dtype=np.int)#指定為int類型
print(a.dtype)
#int 64
b=np.array([1,2,3],dtype=np.float)#指定為float類型
print(b.dtype)
#float 64
創(chuàng)建特定數(shù)據(jù)
a=np.array([[1,2,3],[4,5,6]])#矩陣 2行3列
print(a)
'''
[[1 2 3]
[4 5 6]]
'''
創(chuàng)建全0數(shù)組
a=np.zeros((2,3))#數(shù)據(jù)全0 2行3列
print(a)
'''
[[0 0 0]
[0 0 0]]
'''
創(chuàng)建全1數(shù)組 指定特定類型dtype
a=np.zeros((2,3),dtype=np.int)#數(shù)據(jù)全1 2行3列 同時指定類型
print(a)
'''
[[1 1 1]
[1 1 1]]
'''
創(chuàng)建全空數(shù)組 每個值接近0
a=np.empty(2,3)#數(shù)據(jù)全為empty 3行4列
print(a)
'''
[[ 0.00000000e+000 0.00000000e+000 2.12704693e-314]
[ 2.12706024e-314 2.12706024e-314 2.12706024e-314]]
'''
用array創(chuàng)建連續(xù)數(shù)組
a=np.arange(1,10,2)#1到10的數(shù)據(jù) 2步長
print(a)
#[1 3 5 7 9]
用reshape改變數(shù)據(jù)形狀
a=np.arange(6).reshape(2,3)
print(a)
'''
[[0 1 2]
[3 4 5]]
'''
用linspace創(chuàng)建線段形數(shù)據(jù)
a=np.linspace(1,10,20)#開始端1 結(jié)束端5 分割成10個數(shù)據(jù) 生成線段
print(a)
'''
[ 1. 1.44444444 1.88888889 2.33333333 2.77777778 3.22222222
3.66666667 4.11111111 4.55555556 5. ]
'''
4.3NumPy基礎運算
基礎運算之加、減却盘、三角函數(shù)等
a=np.array([10,20,30,40])
b=np.arange(4) #array[0,1,2,3]
c=a+b#加法運算
print(c)
#[10,21,32,43]
c=a-b#減法運算
print(c)
#[10.19,28,37]
c=10*np.sin(a)#三角函數(shù)運算
#[-5.44021111, 9.12945251, -9.88031624, 7.4511316 ]
print(b<3)#邏輯判斷
#[ True True True False]
d=np.random.random((2,3))#隨機生成2行3列的矩陣
print(d)
'''
[[ 0.21116981 0.0804489 0.51855475]
[ 0.38359164 0.55852973 0.73218811]]
'''
print(np.sum(d))#元素求和
#2.48448292958
print(np.max(d))#元素求最大值
#0.732188108709
print(np.min(d))#元素求最小值
#0.0804488978886
多維矩陣運算
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
c=np.dot(a,b)#或c=a.dot(b)矩陣運算
print(c)
'''
[[2 4]
[2 3]]
'''
對行或列執(zhí)行查找運算
a=np.array([[1,2],[3,4]])
print(a)
'''
[[1,2]
[3,4]]
'''
print(np.max(a,axis=0))#axis=0時是對列進行操作
#[3,4]
print(np.min(a,axis=1))#axis=1是對行進行操作
#[1,3]
矩陣索引操作
A=np.arange(2,14).reshape(3,4)
print(A)
'''
[[2,3,4,5]
[6,7,8,9]
[10,11,12,13]]
'''
print(np.argmax(A))#矩陣中最大元素的索引
#11
print(np.argmin(A))#矩陣中最小元素的索引
#0
print(np.mean(A))#或者np.average(A)求解矩陣均值
#7.5
print(np.cumsum(A))#矩陣累加函數(shù)
#[2 5 9 14 20 27 35 44 54 65 77 90]
print(np.diff(A))#矩陣累差函數(shù)
'''
[[1 1 1]
[1 1 1]
[1 1 1]]
'''
print(np.nonzero(A))#將非0元素的行與列坐標分割開來
#(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]))
矩陣排序灾茁、轉(zhuǎn)置、替換操作
A=np.arange(14,2,-1).reshape((3,4))
print(A)
'''
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
'''
print(np.sort(A))#排序
'''
[[11 12 13 14]
[ 7 8 9 10]
[ 3 4 5 6]]
'''
print(np.transpose(A))
'''
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
'''
print(np.clip(A,5,9))#替換 判斷當前矩陣元素是否比最小值小或比最大值大 若是則替換
'''
[[9 9 9 9]
[9 9 8 7]
[6 5 5 5]]
'''
5.索引
一維索引
A=np.arange(0,12)
print(A)
#[ 0 1 2 3 4 5 6 7 8 9 10 11]
print(A[1])#一維索引
#1
A=np.arange(0,12).reshape((3,4))
print(A[0])
#[0,1,2,3]
二維索引
A=np.arange(0,12).reshape((3,4))
print(A)
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
print(A[1][1])#或者A[1,1]
#5
print(A[1,1:3])#切片處理
#[5,6]
for row in A:
print(A)
'''
[0 1 2 3]
[4 5 6 7]
[ 8 9 10 11]
'''
for col in A:
print(col)
'''
[0 4 8]
[1 5 9]
[ 2 6 10]
[ 3 7 11]
'''
for item in A.flat:
print(item)
'''
0
1
...
10
11
'''
6.NumPy之Array合并
A=np.array([1,1,1])
B=np.array([2,2,2])
print(np.vstack((A,B)))#上下合并
'''
[[1 1 1]
[2 2 2]]
'''
print(np.hstack((A,B)))#左右合并
#[1 1 1 2 2 2]
增加維度
A=np.array([1,1,1])
print(A.shape)
#(3,)
print(A[np.newaxis,:])
#[[1 1 1]]
print(A[np.newaxis,:].shape)#newaxis增加維度
#(1,3)
print(A[:,np.newaxis])
'''
[[1]
[1]
[1]]
'''
print(A[:,np.newaxis].shape)
#(3,1)
多矩陣合并
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
print(np.concatenate((A,B,B,A),axis=0))#0表示上下合并
'''
[[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]
[1]
[1]
[1]]
'''
print(np.concatenate((A,B,B,A),axis=1))#1表示左右合并
'''
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
'''
7.NumPy分割
A=np.arange(12).reshape((3,4))
print(A)
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
print(np.split(A,3,axis=0))#橫向分割成3部分 或者np.vsplit(A,3)
#[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
print(np.split(A,2,axis=1))#豎向分割成2部分 或者np.hsplit(A,2)
'''
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
'''
print(np.array_split(A,3,axis=1))#不等量分割成3部分
'''
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
'''
8.NumPy中copy和deep copy
'='賦值方式會帶有關聯(lián)性
a=np.arange(4)
print(a)
#[1 2 3 4]
b=a
c=a
d=b
print(b is a)
#True
print(c is a)
#True
print(d is a)
#True
b[0]=5#改變b的值谷炸,a,c,d同樣會進行改變
print(a)
#[5 2 3 4]
'copy()'賦值方式?jīng)]有關聯(lián)性
a=np.arange(4)#deep copy
print(a)
#[0 1 2 3]
b=a.copy()
a[0]=5
print(b)#值并不發(fā)生改變
#[0 1 2 3]
更多內(nèi)容請關注公眾號'謂之小一'北专,若有疑問可在公眾號后臺提問,隨時回答旬陡,內(nèi)容轉(zhuǎn)載請注明出處拓颓。