Numpy數(shù)據(jù)存取與常用函數(shù)

一:前言

繼續(xù)做Nmupy模塊的學(xué)習(xí)筆記,這次是numpy的數(shù)據(jù)存取與常用的一些函數(shù)學(xué)習(xí)使用記錄,這些函數(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 : 分割字符串,默認(rèn)是任何空格
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 : 分割字符串,默認(rèn)是任何空格
  • 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ù)組,標(biāo)準(zhǔn)正態(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表示是否可以重用元素,默認(rèn)為False
a1 = np.random.randint(100, 200, (3, 4))
print(a1)
np.random.shuffle(a1)
print(a1)

shuffle() 改變了原來的數(shù)組


Paste_Image.png
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標(biāo)準(zhǔn)差,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)元素的標(biāo)準(zhǔn)差
var(a, axis=None) 根據(jù)給定軸axis計算數(shù)組a相關(guān)元素的方差

axis=None 是統(tǒng)計函數(shù)的標(biāo)配參數(shù)

2. 統(tǒng)計函數(shù)②:

函數(shù) 說明
min(a) max(a) 計算數(shù)組a中元素的最小值、最大值
argmin(a) argmax(a) 計算數(shù)組a中元素最小值、最大值的降一維后下標(biāo)
unravel_index(index, shape) 根據(jù)shape將一維下標(biāo)index轉(zhuǎn)換成多維下標(biāo)
ptp(a) 計算數(shù)組a中元素最大值與最小值的差
median(a) 計算數(shù)組a中元素的中位數(shù)(中值)

七:梯度函數(shù)

函數(shù) 說明
np.gradient(f) 計算數(shù)組f中元素的梯度,當(dāng)f為多維時,返回每個維度梯度

梯度:連續(xù)值之間的變化率,即斜率
XY坐標(biāo)軸連續(xù)三個X坐標(biāo)對應(yīng)的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()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容