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