天天看點

Python--Numpy常用指令

'''Numpy庫吐血大整理'''

import numpy as np

#一維數組(newaxis可以行轉列)
d=np.arange(1,10,1)
#開始值1,結束值9,步長是1的一維數組
e=np.linspace(1,12,num=5,endpoint=True,retstep=True)#等差數列
#開始值1,結束值12,生成5個數字,包含結束值(預設為True),傳回步長
f=np.logspace(1,10,num=10,endpoint=True,base=2)#等比數列
#開始值2的1次方,結束值2的10次方,生成10個數字,包含結束值,底數為2

#二維數組
a=np.zeros((3,4))
#3行4列全是0
b=np.ones((3,4))
#3行4列全是1
c=np.full((3,4),2.0)
#3行4列全是2
g=np.identity(3)
#3行3列,對角線是1,其他全是0

#數組的連接配接和分割
print(np.concatenate((a,b),axis=0))
#連接配接a,b倆數組沿着0軸方向,預設為0軸
print(np.vstack((a,b)))
#連接配接a,b倆數組沿着0軸方向,1軸元素個數必須相同
print(np.hstack((a,b)))
#連接配接a,b倆數組沿着1軸方向,0軸元素個數必須相同
print(np.split(a,3,axis=0))
#沿着0軸方向切割a數組将其分為3個二維數組,結果為清單,預設沿着0軸
print(np.vsplit(a,3))
#沿着0軸方向切割a數組将其分為3個二維數組,結果為清單
print(np.hsplit(a,4))
#沿着1軸方向切割a數組将其分為4個二維數組,結果為清單

#random子產品
print(np.random.rand(5,2))
#5行2列的數組,元素是大于等于0小于1的浮點數
print(np.random.randn(5,2))
#5行2列的數組,元素是标準正态分布随機數(平均值0,标準差1)
print(np.random.randint(low=0,high=100,size=5))
#一個清單,有5個大于等于1小于100的整數
print(np.random.normal(loc=10,scale=2,size=5))
#一個清單,有5個平均值是10标準差是2的正态分布随機數

#排序
x=np.array([[3,1,4],
   [2,5,3],
   [1,8,3]])
print(np.sort(x,axis=-1))
#沿着最後一個軸(即1軸)對x數組内元素進行從小到大排序
print(np.argsort(x,axis=-1))
#沿着最後一個軸(即1軸)對x數組内元素進行從小到大排序,展示的結果是元素的索引



#聚合函數(nan可以排除null和異常值)
print(np.sum(x))
#求各元素之和
print(np.cumsum(x,axis=0))
#按照0軸依次累加,也就是從上往下累加
print(np.cumsum(x,axis=1))
#按照1軸依次累加,也就是從左往右累加
print(np.cumprod(x,axis=1))
#從左往右累乘
print(np.cumprod(x,axis=0))
#從上往下累乘
print(np.amax(x))
#求元素中的最大值
print(np.amin(x))
#求元素中的最小值
print(np.mean(x))
#求元素的平均值
print(np.average(x,axis=None,weights=None))
#weights表示權重,它的值要和原數組格式一樣,裡面各個元素之和等于1

#儲存
np.save('SE.npy',x,allow_pickle=True,fix_imports=True)
#allow_pickle表示十分允許使用PICKLE儲存數組對象,fix_imports表示十分允許PY2讀取3的資料
np.savez('NPZ.npz')

#讀取
np.load('NPZ.npz',mmap_mode=None,allow_pickle=True,fix_imports=True)


#數組的廣播原理
1,如果兩個數組次元數不一樣,那麼小的數組會補齊次元
比如[1,2,3]+5,會廣播成[1,2,3]+[5,5,5]
2,如果兩個數組隻有一個次元一樣,那麼小的數組會按照大的數組補齊次元
3,如果兩個數組形狀在任何一個次元都不一樣且沒有一個次元是1,就報錯。