java基礎學python(五)----------numpy
NumPy(底層用c完成的)
是一個開源的Python科學計算基礎庫
一個強大的N維陣列物件ndarray
廣播函式功能
整合C/C++/Fortran程式碼的工具
線性代數、傅立葉變換、隨機數生成等功能
NumPy是SciPy,Pandas等資料處理或科學計算庫的基礎
ndarray:N維陣列物件
陣列物件可以去掉元素間運算所需的迴圈,使一維向量更像單個數據
設定專門的陣列物件,經過優化,可以提升這類應用的運算速度
一般要求所有元素型別相同
當ndarray的維度資料量不同時,預設資料型別時object,它把每個維度看做了一個物件
維度的數量不同時無法發揮
建立ndarray陣列:
從python中的列表,元組等型別建立ndarray陣列;
使用numpy中函式建立ndarray陣列,如:arange,ones,zeros等
從位元組流中建立ndarray陣列
從檔案中讀取特定格式來建立ndarray陣列
陣列可以使用索引和切片
陣列運算的各種方法
CSV檔案
save:
np.savetxt(frame , array , fmt=‘%.18e’ ,delimiter=None)
Frame:檔案、字串或產生器,可以是.gz或.bz2的壓縮檔案
array:存入檔案的陣列
Fmt
Delimiter:分割字串,預設是任何空格
load:
np.loadtxt(frame , dtype=np.float , delimiter=None , unpack=False)
frame:檔案、字串或產生器,可以是.gz或.bz2的壓縮檔案
dtype:資料型別,可選
delimiter:分割字串,預設是任何空格
unpack:如果True,讀入屬性將分別寫入不同變數
侷限性中:只能有效儲存一維和二維陣列
多維陣列
np.tofile(frame , sep=‘’ , format=‘%s’)
np.fromfile(frame , dtype=float , count=-1 , sep=‘’) 讀檔案(可以格式化維度)
numpy的便捷檔案存取
np.save(fname , array)或np.savez(fname , array)
fname:檔名、以.npy為副檔名,壓縮副檔名為.npz
array:陣列變數
二進位制儲存:第一行用正常編碼寫了檔案的格式
np.load(fname)
fname:檔名、以.npy為副檔名,壓縮副檔名為.npz
隨機數函式np.random
rand(d0…dn)均勻分佈
randn(d0…dn)正態分佈
randint(low ,high ,[ shape,shape])
seed(s)隨機數種子
shuffle(a)陣列a根據第0軸進行隨機排列(其實就是行位置變換),改變陣列a
permutation(a)與以上相同,不改變陣列a
choice(a ,size ,replace , p)從一維陣列a中以概率p抽取元素,形成size形狀新陣列
replace表示是否可以重用元素,預設為false
uniform(low ,high ,size)產生均勻分佈的陣列,low起始值,high結束值,size形狀
normal(loc , scale , size)產生正態分佈的陣列,loc均值,scale標準差,size形狀
poisson(lam ,size)產生柏鬆分佈的陣列,lam隨機事件發生率,size形狀
統計函式
sum(a ,axis=None)。 axis=0,就是求二維陣列每一列的和;
axis=1,就是求二維陣列每一行的和
axis指的就是維度
mean(a ,axis=None)求期望
average(a , axis=None , weights=None)加權平均值,若不給定weights將所有元素當作等
權重
std(a ,axis=None)標準差
var(a ,axis=None)方差
min(a) max(a)
argmin(a) argmax(a)計算最大值最小值的降一維後下標(其實就是轉換成一維陣列後
的下標)
unravel_index(index , shape)根據shape將一維下標index轉換成多維下標(轉換成多維數
組後的下標)
ptp(a)計算陣列a中元素最大值與最小值的差
median(a)計算陣列a中元素的中位數(中值)
梯度函式
梯度:連續值之間的變化率,即斜率
np.gradient(f)計算陣列f中元素的梯度,當f為多維時,返回每個維度梯度
PIL庫(python image library):具有強大影象處理能力的第三方庫
from PIL import Image
from bumpy as np
Im = np.array(Image.open(path))
print(im.shape,im.dtype)
輸出結果:(669,1012,3) uint8
#影象的變換
a = [255 ,255 ,255 ] - im
b = Image.fromarray(b.astype(‘uint8’))
b.save(path)
convert(‘L’)#灰度變換(二維陣列)