一:前言
繼續(xù)做Nmupy模塊的學習筆記蜕青,這次是numpy的數(shù)據(jù)存取與常用的一些函數(shù)學習使用記錄,這些函數(shù)都將為以后的數(shù)據(jù)操作打下基礎(chǔ)横蜒。涉及到的有存取函數(shù)叙淌、強大隨機函數(shù)秤掌、統(tǒng)計函數(shù)和梯度函數(shù)。目的:掌握表示鹰霍、清洗闻鉴、統(tǒng)計和展示數(shù)據(jù)的基礎(chǔ)能力
二:CSV文件的存取
1. 逗號分隔值
Comma-Separated Values,CSV茂洒,有時也稱為字符分隔值孟岛,因為分隔字符也可以不是逗號,其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)督勺。
2. 保存CSV文件
** np.savetxt(frame, array, fmt='%.18e', delimiter=None)**
- frame : 文件渠羞、字符串或產(chǎn)生器,可以是.gz或.bz2的壓縮文件
- array : 存入文件的數(shù)組
- fmt : 寫入文件的格式智哀,例如:%d %.2f %.18e
- delimiter : 分割字符串次询,默認是任何空格
a1 = np.arange(100).reshape(5, 20)
np.savetxt('a1.csv', a1, fmt = '%d', delimiter=',')
a2 = np.arange(100).reshape(5, 20)
np.savetxt('a2.csv', a2, fmt = '%.1f', delimiter=',')
3. 讀取CSV文件
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
- frame : 文件瓷叫、字符串或產(chǎn)生器屯吊,可以是.gz或.bz2的壓縮文件
- dtype : 數(shù)據(jù)類型,可選
- delimiter : 分割字符串摹菠,默認是任何空格
- unpack : 如果True盒卸,讀入屬性將分別寫入不同變量
b1 = np.loadtxt('a1.csv', delimiter=',')
print(b1)
b2 = np.loadtxt('a2.csv', dtype=np.int, delimiter=',')
print(b2)
4. CSV文件存取的局限性
CSV只能有效存儲一維和二維數(shù)組
那么np.savetxt() np.loadtxt()只能有效存取一維和二維數(shù)組
三:多維數(shù)據(jù)的存取
1. 多維數(shù)據(jù)的保存
a.tofile(frame, sep='', format='%s')
- frame : 文件、字符串
- sep : 數(shù)據(jù)分割字符串次氨,如果是空串蔽介,寫入文件為二進制
- format : 寫入數(shù)據(jù)的格式
如果是寫入二進制則更節(jié)省硬盤空間,所以在以存儲為目的即可使用這種方式煮寡;如果為了方便閱讀則可以加入分割字符串以字符串的形式保存文件虹蓄。
a = np.arange(100).reshape(5, 10, 2)
a.tofile('b.dat', sep=',', format='%d')
# 保存的數(shù)據(jù)是全部的數(shù)據(jù),但是沒有了維度信息
a.tofile('c.dat', format='%d')
# 沒有分隔符幸撕,以二進制保存薇组,使用文本編輯器打開是亂碼的。
2. 多維數(shù)據(jù)的讀取
np.fromfile(frame, dtype=float, count=‐1, sep='')
- frame : 文件杈帐、字符串
- dtype : 讀取的數(shù)據(jù)類型
- count : 讀入元素個數(shù),‐1表示讀入整個文件
- sep : 數(shù)據(jù)分割字符串专钉,如果是空串挑童,寫入文件為二進制
a1 = np.fromfile('b.dat', dtype=np.int, sep=',').reshape(5, 10, 2)
print(a1)
a2 = np.fromfile('c.bat', dtype=np.int).reshape(5, 10, 2)
print(a2)
該方法需要讀取時知道存入文件時數(shù)組的維度和元素類型
a.tofile()和np.fromfile()需要配合使用
可以通過元數(shù)據(jù)文件來存儲額外信息
四:Nmupy的便捷文件存取
np.save(fname, array) 或 np.savez(fname, array)
- fname : 文件名,以.npy為擴展名跃须,壓縮擴展名為.npz
- array : 數(shù)組變量
np.load(fname)
- fname : 文件名站叼,以.npy為擴展名,壓縮擴展名為.npz
a = np.arange(100).reshape(5, 10, 2)
np.save('a.npy', a)
b = np.load('a.npy')
print(b)
打開a文件就可以看到菇民,這里保存著二進制的數(shù)據(jù)和維度的信息尽楔,存儲和讀取都十分方便投储。
五:Nmupy的隨機函數(shù)
1. 隨機函數(shù)①:
函數(shù) | 說明 |
---|---|
rand(d0,d1,..,dn) | 根據(jù)d0‐dn創(chuàng)建隨機數(shù)數(shù)組,浮點數(shù)阔馋,[0,1)玛荞,均勻分布 |
randn(d0,d1,..,dn) | 根據(jù)d0‐dn創(chuàng)建隨機數(shù)數(shù)組,標準正態(tài)分布 |
randint(low[,high,shape]) | 根據(jù)shape創(chuàng)建隨機整數(shù)或整數(shù)數(shù)組呕寝,范圍是[low, high) |
seed(s) | 隨機數(shù)種子勋眯,s是給定的種子值 |
a1 = np.random.rand(3, 4, 5)
print(a1)
a2 = np.random.randn(3, 4, 5)
print(a2)
a3 = np.random.randint(100, 200, (3, 4))
print(a3)
2. 隨機函數(shù)②:
函數(shù) | 說明 |
---|---|
shuffle(a) | 根據(jù)數(shù)組a的第1軸進行隨排列,改變數(shù)組x |
permutation(a) | 根據(jù)數(shù)組a的第1軸產(chǎn)生一個新的亂序數(shù)組下梢,不改變數(shù)組x |
choice(a[,size,replace,p]) | 從一維數(shù)組a中以概率p抽取元素客蹋,形成size形狀新數(shù)組replace表示是否可以重用元素,默認為False |
a1 = np.random.randint(100, 200, (3, 4))
print(a1)
np.random.shuffle(a1)
print(a1)
shuffle() 改變了原來的數(shù)組
b = np.random.randint(100, 200, (3, 4))
print(b)
np.random.permutation(b)
print(b)
permutation() 沒有改變原來的數(shù)組
3. 隨機函數(shù)③:
函數(shù) | 說明 |
---|---|
uniform(low,high,size) | 產(chǎn)生具有均勻分布的數(shù)組,low起始值,high結(jié)束值,size形狀 |
normal(loc,scale,size) | 產(chǎn)生具有正態(tài)分布的數(shù)組,loc均值,scale標準差,size形狀 |
poisson(lam,size) | 產(chǎn)生具有泊松分布的數(shù)組,lam隨機事件發(fā)生率,size形狀 |
六: Numpy的統(tǒng)計函數(shù)
1. 統(tǒng)計函數(shù)①:
函數(shù) | 說明 |
---|---|
sum(a, axis=None) | 根據(jù)給定軸axis計算數(shù)組a相關(guān)元素之和孽江,axis整數(shù)或元組 |
mean(a, axis=None) | 根據(jù)給定軸axis計算數(shù)組a相關(guān)元素的期望讶坯,axis整數(shù)或元組 |
average(a,axis=None,weights=None) | 根據(jù)給定軸axis計算數(shù)組a相關(guān)元素的加權(quán)平均值 |
std(a, axis=None) | 根據(jù)給定軸axis計算數(shù)組a相關(guān)元素的標準差 |
var(a, axis=None) | 根據(jù)給定軸axis計算數(shù)組a相關(guān)元素的方差 |
axis=None 是統(tǒng)計函數(shù)的標配參數(shù)
2. 統(tǒng)計函數(shù)②:
函數(shù) | 說明 |
---|---|
min(a) max(a) | 計算數(shù)組a中元素的最小值、最大值 |
argmin(a) argmax(a) | 計算數(shù)組a中元素最小值岗屏、最大值的降一維后下標 |
unravel_index(index, shape) | 根據(jù)shape將一維下標index轉(zhuǎn)換成多維下標 |
ptp(a) | 計算數(shù)組a中元素最大值與最小值的差 |
median(a) | 計算數(shù)組a中元素的中位數(shù)(中值) |
七:梯度函數(shù)
函數(shù) | 說明 |
---|---|
np.gradient(f) | 計算數(shù)組f中元素的梯度辆琅,當f為多維時,返回每個維度梯度 |
梯度:連續(xù)值之間的變化率担汤,即斜率
XY坐標軸連續(xù)三個X坐標對應的Y軸值:a, b, c涎跨,其中,b的梯度是: (c‐a)/2
八:單元小結(jié)
CSV文件
np.loadtxt()
np.savetxt()
多維數(shù)據(jù)存取
a.tofile() np.fromfile()
np.save() np.savez() np.load()
隨機函數(shù)
np.random.rand() np.random.randn()
np.random.randint() np.random.seed()
np.random.shuffle() np.random.permutation()
np.random.choice()
NumPy的統(tǒng)計函數(shù)
np.sum() np.min()
np.mean() np.max()
np.average() np.argmin()
np.std() np.argmax()
np.var() np.unravel_index()
np.median() np.ptp()
NumPy的梯度函數(shù)
np.gradient()