astype函数_Python库收录——数值计算numpy库常用函数(含注释)
這里對(duì)Numpy庫常用的函數(shù)進(jìn)行總結(jié)。詳細(xì)的函數(shù)內(nèi)容可以查閱。Numpy是科學(xué)計(jì)算庫,是一個(gè)強(qiáng)大的N維數(shù)組對(duì)象ndarray,是廣播功能函數(shù)。其整合C/C++.fortran代碼的工具 ,更是Scipy、Pandas等的基礎(chǔ)
————————————————
注意,基本所有語句都可以使用兩種寫法,如下面的例子
# dot()函數(shù)可以通過numpy庫調(diào)用,也可以由數(shù)組實(shí)例對(duì)象進(jìn)行調(diào)用 a.dot(b) 與 numpy.dot(a,b) #a,b是數(shù)組(矩陣)b=a.reshape(shape) 與 b=np.reshape(a,shape) b=a.resize(shape) 與 b=np.resize(a,shape) #如b=a.reshape((3,2)) 與 b=np.reshape(a,(3,2))另外,習(xí)慣上, 數(shù)組元素編號(hào)、行列編號(hào)都是從0開始的。如一維數(shù)組有n個(gè)元素,元素編號(hào)為0到n-1;如三維數(shù)組有3層4行5列,(0,1,3)表示第1層第2行第4列的元素。
三維數(shù)組維度順序?yàn)?#xff08;層數(shù)、行、列),代號(hào)表示為0,1,2, 即z,y,x,即深度、高度、寬度。
-數(shù)組信息查詢
.ndim :維度。說白了就是[]括號(hào)的層數(shù) .shape :各維度的尺度,注意(x,y)表x行y列,(x,1)表x行1列,(y,)表1行y列。不知道為什么1行時(shí)這么特殊,不把1寫出來。看下面截圖例子 .size :元素的個(gè)數(shù)。與元素位于第幾層[]無關(guān),表所有獨(dú)立的元素的總數(shù) .dtype :元素的類型 dtype(‘int32’) .itemsize :每個(gè)元素的大小,以字節(jié)為單位 ,每個(gè)元素占4個(gè)字節(jié).shape 表各維度的尺度,注意(x,y)表x行y列,(x,1)表x行1列,(y,)表1行y列。-ndarray數(shù)組的創(chuàng)建
np.arange(m,n) ; 1行n-m列數(shù)組,元素從m到n-1 np.arange(n)或np.arange(n,); 1行n列數(shù)組,元素從0到n-1.即不輸入m,則默認(rèn)m=0np.ones((m,n)): m行n列數(shù)組,元素全為1 np.ones((n))或np.ones((n,)) np.ones(n)或np.ones(n,): 1行n列數(shù)組,元素全為1.即不輸入m則默認(rèn)m=1np.zeros((m,n),dtype = np.int32): 生成int32型的全0,dtype參數(shù)可加可不加,上面幾個(gè)語句也是一樣 np.zeros((n,))或np.zeros(n,)或np.zeros((n))或np.zeros(n) 默認(rèn)m=1,1行n列數(shù)組 注意np.zeros(m,n)會(huì)報(bào)錯(cuò),np.zeros(shape)參數(shù)shape必須是坐標(biāo)形式(x,y),帶括號(hào)np.full(shape, val): 參數(shù)shape是坐標(biāo)形式(x,y),元素全為val.若不輸入x則默認(rèn)x=1np.eye(n) : 生成單位矩陣,默認(rèn)m=n np.eye(m,n) : 生成類似單位矩陣,多余的行或列全為0.參見下面截圖np.ones_like(a) : 按數(shù)組a的形狀生成全1的數(shù)組 np.zeros_like(a): 同理 np.full_like (a, val) : 同理np.linspace(m,n,x) : 閉區(qū)間[m,n]內(nèi),等間距生成1行x列數(shù)組,包含m和n np.linspace(m,n,x, endpoint = False) : 半開區(qū)間[m,n)內(nèi),等間距生成1行x列數(shù)組,包含m,不含n 注意endpoint=False表示n不含在內(nèi),實(shí)際上是m到n,取x+1個(gè)點(diǎn)中間夾x段,只取前x個(gè)點(diǎn). 注意沒有endpoint=Ture。只有False參數(shù)np.concatenate((a1, a2, ...), axis) :將若干數(shù)組沿行方向或列方向連接起來 a1, a2, ...是相同類型的數(shù)組,axis連接數(shù)組所沿的軸,默認(rèn)為 0。axis=0表列方向,axis=1表行方向-數(shù)組的維度變換
.reshape(shape) : 不改變數(shù)組元素,根據(jù)shape重新組織行列。如1行4列reshape為2行2列、4行1列。3行2列等不合理的,會(huì)報(bào)錯(cuò)注意,三維數(shù)組維度順序?yàn)?,1,2,即z,y,x,即深度、高度、寬度,即層數(shù)、行、列a = np.arange(24).reshape((3,4,2)),表3層4行2列 .resize(shape) : 改變當(dāng)前數(shù)組,依shape生成。resize功能>=reshape如1行4列resize為2行2列、4行1列,則實(shí)際等同于reshape。resize為3行2列,多出來的位置則會(huì)用已有的元素(按照順序)填充。見截圖 .swapaxes(ax1,ax2) : 將兩個(gè)維度調(diào)換。若數(shù)組有n維,則ax1,ax2可取0,1,2...n-1.高維情況換軸還是很抽象的。見截圖 .flatten() : 對(duì)數(shù)組進(jìn)行降維,保留全部元素降成1維數(shù)組。元素順序,排完原數(shù)組第一行,開始第二行,類推-數(shù)組的類型變換
數(shù)據(jù)類型的轉(zhuǎn)換 :a.astype(new_type) : eg, a.astype (np.float), a.astype(float)也是對(duì)的 數(shù)組向列表的轉(zhuǎn)換: a.tolist() 注意[]層數(shù)不會(huì)改變,例如三維數(shù)組變成列表后,[]依然保留,只不過沒有數(shù)組行列形式了-數(shù)組的索引和切片
一維數(shù)組索引 a = np.array([9, 8, 7, 6, 5, ]) 一維數(shù)組有n個(gè)元素,元素編號(hào)為0到n-1 a[0]=9, a[1]=8一維數(shù)組切片 a = np.array([9, 8, 7, 6, 5, ]) a[1:4:2] = array([8, 6]) : a[起始編號(hào):終止編號(hào)(不含): 步長] a[::2] = array([9, 7, 5]) 缺省時(shí),表示從第0個(gè)元素開始,到最后一個(gè)元素 a[::1] = array([9, 8, 7, 6, 5])- 多維數(shù)組索引 a = np.arange(24).reshape((2, 3, 4)) a[1, 2, 3] 表示3個(gè)維度上的編號(hào),即第2層第3行第4列的元素。編號(hào)從0開始- 多維數(shù)組切片 a [:,:,::2 ] 缺省時(shí),表從第0個(gè)元素開始,到最后一個(gè)元素.注意比較一維數(shù)組切片的關(guān)聯(lián)。這里列切片2個(gè)冒號(hào)-數(shù)組的運(yùn)算
np.abs(a) 和 np.fabs(a) : 取各元素的絕對(duì)值 .fabs()取絕對(duì)值并使成為float類型 np.sqrt(a) : 計(jì)算各元素的平方根 np.square(a): 計(jì)算各元素的平方 np.log(a) np.log10(a) np.log2(a) : 計(jì)算各元素的自然對(duì)數(shù)、10、2為底的對(duì)數(shù) np.ceil(a) np.floor(a) : 計(jì)算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整) np.rint(a) : 各元素 四舍五入。對(duì)于負(fù)數(shù)元素,先取其絕對(duì)值進(jìn)行四舍五入,然后再加負(fù)號(hào)。如-1.5變成-2,-1.4變成-1例如np.rint(np.array([-1.5,1.5,-4.4]))=array([-2.,2.,-4.]) np.modf(a) : 將數(shù)組各元素的小數(shù)和整數(shù)部分以兩個(gè)獨(dú)立數(shù)組形式返回 np.exp(a) : 計(jì)算各元素的指數(shù)值 np.sign(a) : 計(jì)算各元素的符號(hào)值 1(+),0,-1(-) np.maximum(a, b) np.fmax() :a,b數(shù)組具有相同的形式,一一比較相應(yīng)位置處的元素取大者. fmax()取最大值并使成為float類 np.minimum(a, b) np.fmin() : 同上,取最小值。a,b形式不同,則會(huì)報(bào)錯(cuò)如例,a=[1,2,-1],b=[0,3,-2],則np.maximum(a, b)=[1,3,-1],np.minimum(a, b)=[0,2,-2] np.mod(a, b) : 元素級(jí)的模運(yùn)算 np.copysign(a, b) : 將b中各元素的符號(hào)賦值給數(shù)組a的對(duì)應(yīng)元素- NumPy IO 數(shù)據(jù)存取于文件。
主要是np.savetxt()和np.loadtxt()、numpy.save()和numpy.load()、numpy.savez()和numpy.load()、array.tofile()和np.fromfile()
np.savetxt(FILENAME, array, fmt="%d", delimiter=",") np.loadtxt(FILENAME, dtype=int, delimiter=' ') savetxt(),只能存儲(chǔ)一維和二維數(shù)組.存儲(chǔ)三維及以上則會(huì)報(bào)錯(cuò)。 savetxt() 函數(shù)將數(shù)據(jù)以文本形式存儲(chǔ)到txt文件中 fmt表示元素的格式如 %d, %.2f, %.18e delimiter指定各種分隔符、針對(duì)特定列的轉(zhuǎn)換器函數(shù)、需要跳過的行數(shù)等。默認(rèn)是空格 實(shí)例1: a = np.array([1,2,3,4,5]) np.savetxt('out.txt',a) b = np.loadtxt('out.txt') 實(shí)例2: a=np.arange(0,10,0.5).reshape(4,-1) np.savetxt("out.txt",a,fmt="%d",delimiter=",") # 改為保存為整數(shù),以逗號(hào)分隔 b = np.loadtxt("out.txt",delimiter=",") # load 時(shí)也要指定為逗號(hào)分隔numpy.save(file, arr, allow_pickle=True, fix_imports=True) numpy.load('outfile.npy') numpy.save() 函數(shù)一次保存一個(gè)數(shù)組到.npy文件中 file是要保存的文件,擴(kuò)展名為 .npy,如果文件路徑末尾沒有擴(kuò)展名 .npy,該擴(kuò)展名會(huì)被自動(dòng)加上。 allow_pickle: 可選,布爾值,允許使用 Python pickles 保存對(duì)象數(shù)組,Python 中的 pickle 用于在保存到磁盤文件或從磁盤文件讀取之前,對(duì)對(duì)象進(jìn)行序列化和反序列化。 fix_imports: 可選,為了方便 Pyhton2 中讀取 Python3 保存的數(shù)據(jù) 實(shí)例: a = np.array([1,2,3,4,5]) # 保存到 outfile.npy 文件上 np.save('outfile.npy',a) # 保存到 outfile2.npy 文件上,如果文件路徑末尾沒有擴(kuò)展名 .npy,該擴(kuò)展名會(huì)被自動(dòng)加上 np.save('outfile2',a) b = np.load('outfile.npy') numpy.savez(file, *args, **kwds) numpy.load("runoob.npz") numpy.savez() 函數(shù)一次可以保存多個(gè)數(shù)組到.npz文件中 file:要保存的文件,擴(kuò)展名為 .npz,如果文件路徑末尾沒有擴(kuò)展名 .npz,該擴(kuò)展名會(huì)被自動(dòng)加上。 args: 要保存的數(shù)組,可以使用關(guān)鍵字參數(shù)為數(shù)組起一個(gè)名字,非關(guān)鍵字參數(shù)傳遞的數(shù)組會(huì)自動(dòng)起名為 arr_0, arr_1, … kwds: 要保存的數(shù)組使用關(guān)鍵字名稱 實(shí)例: a = np.array([[1,2,3],[4,5,6]]) b = np.arange(0, 1.0, 0.1) c = np.sin(b) # c 使用了關(guān)鍵字參數(shù) sin_array np.savez("runoob.npz", a, b, sin_array = c) r = np.load("runoob.npz") print(r.files) # 查看各個(gè)數(shù)組名稱 print(r["arr_0"]) # 數(shù)組 a print(r["arr_1"]) # 數(shù)組 b print(r["sin_array"]) # 數(shù)組 ca.tofile(frame, sep=’’, format=’%s’ ) ##注意沒有numpy.tofile(),這個(gè)寫法報(bào)錯(cuò) np.fromfile(frame, dtype = float, count=-1, sep=’’) 用于多維數(shù)據(jù)的存取,a.tofile() 和np.fromfile()要配合使用,要知道數(shù)據(jù)的類型和維度。 frame:文件、字符串;dtype:讀取的數(shù)據(jù)以此類型存儲(chǔ); count:讀入元素個(gè)數(shù),-1表示讀入整個(gè)文件; sep: 數(shù)據(jù)分割字符串,如果是空串,寫入文件為二進(jìn)制 format:: 寫入數(shù)據(jù)的格式 實(shí)例: a = np.arange(100).reshape(5, 10, 2) a.tofile(“b.dat”, sep=”,”, format='%d') np.fromfile(“b.dat”)- numpy隨機(jī)數(shù)函數(shù)
numpy 的random子庫,注意numpy.random子庫和獨(dú)立的random庫不是同一個(gè)庫。二者有差別,numpy.random子庫主要產(chǎn)生隨機(jī)數(shù)作為多維數(shù)組的元素,而random獨(dú)立庫單純產(chǎn)生隨機(jī)數(shù),因此二者盡管有很多同名的隨機(jī)數(shù)產(chǎn)生方式,但numpy.random一般會(huì)多一個(gè)shape數(shù)組維度參數(shù)
np.random.* np.random.rand(d0, d1, …,dn) d0到dn指定各維度結(jié)構(gòu),如rand(3,4,5)表3層4行5列三維數(shù)組。各元素是[0, 1)的浮點(diǎn)數(shù),服從均勻分布 np.random.randn(d0, d1, …,dn) d0到dn含義同上。元素服從標(biāo)準(zhǔn)正態(tài)分布 np.random.randint() randint(low,high,shape): 依shape創(chuàng)建隨機(jī)整數(shù)或整數(shù)數(shù)組,范圍是[low, high).如randint(1,10,(2,3,4)) seed(s) :隨機(jī)數(shù)種子,s是給定種子值。給定隨機(jī)數(shù)組種子后,隨后使用randrandnrandint產(chǎn)生的隨機(jī)數(shù)組不變。見截圖shuffle(a) : 根據(jù)數(shù)組a的第一軸進(jìn)行隨機(jī)排列,改變數(shù)組a。隨意調(diào)換兩軸,作用結(jié)果就是改變了的數(shù)組a permutation(a) : 根據(jù)數(shù)組a的第一軸進(jìn)行隨機(jī)排列, 隨意調(diào)換兩軸,但是不改變?cè)瓟?shù)組a,將生成新數(shù)組 choice(a[, size, replace, p]) : 從一維數(shù)組a中以概率p抽取元素, 形成size形狀新數(shù)組,replace表示是否可以重用元素,缺省值為True。 實(shí)例: b=np.random.randint(100,200,(8,)) np.random.choice(b,(3,2)) #會(huì)有重復(fù)的元素 np.random.choice(b,(3,2),replace=False) #沒有重復(fù)的元素 np.random.choice(b,(3,2),p=b/np.sum(b)) #p是出現(xiàn)幾率,與數(shù)字大小成正比np.random.uniform(low,high,shape) ##在上下限間,產(chǎn)生均勻分布的數(shù)組 np.random.normal(avr,scale,shape) ##avr均值,scale標(biāo)準(zhǔn)差,產(chǎn)生正太分布的數(shù)組 np.random.poisson(lam,shape) ##lam隨機(jī)事件發(fā)生率,產(chǎn)生具有泊松分布的數(shù)組。這個(gè)lam是什么意思?只要是非負(fù)數(shù)就行- numpy的統(tǒng)計(jì)函數(shù)
sum(a, axis = None) : 依給定軸axis計(jì)算數(shù)組a相關(guān)元素之和,axis為整數(shù)或者元組 mean(a, axis = None) : 同理,計(jì)算平均值 average(a, axis =None, weights=None) : 依給定軸axis計(jì)算數(shù)組a相關(guān)元素的加權(quán)平均值 std(a, axis = None) :同理,計(jì)算標(biāo)準(zhǔn)差 var(a, axis = None): 計(jì)算方差 #注意,以上axis參數(shù)可選0,1,2表示分別在相應(yīng)方向上操作。如果不填,則表示對(duì)數(shù)組中全部元素操作 實(shí)例: np.mean(a, axis =1) : 對(duì)數(shù)組a的行維度的數(shù)據(jù)進(jìn)行求平均(注意,是固定第幾列,求第1、2、3...行的平均) a = np.arange(12).reshape(2,3,2) np.average(a, axis=1, weights =[10, 5, 1]) : 對(duì)a數(shù)組 行維度加權(quán)求平均,weights為權(quán)重系數(shù),分別對(duì)應(yīng)求第1、2、3行min(a) max(a) : 計(jì)算數(shù)組a的最小元素值和最大元素值 ptp(a) : 計(jì)算數(shù)組a最大值和最小值的差 median(a) : 計(jì)算數(shù)組a中元素的中位數(shù)(中值) argmin(a) argmax(a) : 計(jì)算數(shù)組a的最小、最大值的下標(biāo)(注意:返回值是假想將多維數(shù)組解折疊為一維數(shù)組時(shí)的下標(biāo)) unravel_index(index, a.shape) : 輸入a.shape和一維下標(biāo)index,找到相應(yīng)元素的實(shí)際多維下標(biāo)(不需要假想為一維) 實(shí)例: a = [[15, 14, 13], [12, 11, 10] ] np.argmax(a) = 0 #最大值為假想的一維數(shù)組中的第一個(gè)元素 np.unravel_index( np.argmax(a), a.shape) = (0,0) #最大值在實(shí)際數(shù)組的坐標(biāo)為第1行第1列np.average(a, axis=1, weights =[10, 5, 1])和np.mean(a, axis =1)- numpy的梯度函數(shù)
np.gradient(a) : 計(jì)算數(shù)組a中元素的梯度,f為多維時(shí),返回每個(gè)維度的梯度 離散梯度計(jì)算: 三個(gè)數(shù)a, b, c 其中a的梯度是(b-a)/1, b的梯度是(c-a)/2,而c的梯度是(c-b)/1當(dāng)為二維數(shù)組時(shí),np.gradient(a) 得出兩個(gè)數(shù)組. 第一個(gè)數(shù)組由依次兩行的相應(yīng)元素相減得到,如第2行減第1行,第3行減第2行... 第二個(gè)數(shù)組由依次兩列的相應(yīng)元素相減得到,如第2列減第1列,第3列減第2列... 多維數(shù)組時(shí)類似- 圖像的表示和變換
圖像實(shí)際是一個(gè)二維數(shù)組,numpy結(jié)合python PIL(python image library)庫常使用與圖像處理
from PIL import Image # Image是PIL庫中代表一個(gè)圖像的類(對(duì)象)im = np.array(Image.open(“.jpg”))im = Image.fromarray(b.astype(‘uint8’)) # 生成 im.save(“路徑.jpg”) # 保存im = np.array(Image.open(“.jpg”).convert('L')) # convert(‘L’)表示轉(zhuǎn)為灰度圖————————————————
-數(shù)組的運(yùn)算
numpy.dot()函數(shù)用于數(shù)組相乘
基本用法和matlab類似 使用dot()函數(shù)的寫法,有兩種:dot()函數(shù)可以通過numpy庫調(diào)用,也可以由數(shù)組實(shí)例對(duì)象進(jìn)行調(diào)用 a.dot(b) 與 numpy.dot(a,b) #a,b是數(shù)組(矩陣)dot()返回的是兩個(gè)數(shù)組的點(diǎn)積(dot product) 1. 若a和b是一維數(shù)組,則得到的是兩數(shù)組的內(nèi)積(inner product) 2. 若a和b是二維數(shù)組(矩陣)之間的運(yùn)算,則得到的是矩陣積(mastrix product) 實(shí)例見截圖此外,矩陣積計(jì)算不遵循交換律, np.dot(a,b) 和 np.dot(b,a) 得到的結(jié)果是不一樣的。總結(jié)
以上是生活随笔為你收集整理的astype函数_Python库收录——数值计算numpy库常用函数(含注释)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019.3.1版本pycharm撤销及
- 下一篇: 如何绘制逻辑图 — 5. 要素的属性:系