numpy陣列用法大全
阿新 • • 發佈:2018-11-07
機器學習的最基礎模組就是numpy模組了,而numpy模組中的陣列操作又是重中之重,所以我們要把陣列的各種方法弄得明明白白的,以下就是陣列的一些常用方法
1.建立各種各樣的陣列:
import numpy as np import matplotlib.pyplot as plt print(np.zeros(10)) #一維全零陣列 print(np.zeros((3,3),dtype=np.int)) #多維tupple陣列 3行3列 可以加資料型別 print(np.ones(10)) #一維全1陣列 print(np.ones((4,4))) #多維全1陣列 print(np.full((3,5),8)) #可以指定陣列元素的值 print(np.identity(4)) #建立單位矩陣 print(np.eye(4,4,1)) #4行4列單位矩陣 對角線從下標1開始 print(np.array([1,23,4,'ltf','fjf'])) #可以隨便傳入資料 一維陣列 print(np.array([[1,2,3],['ltf','lsq','fjf'],['男','女','人妖']])) #多維陣列,隨便定義、 a=np.array([[1,2,3],[4,3,6]]) b=np.full_like(a,3.2) c=np.ones_like(a)print(b) print(c) #根據一個向量建立斜對角線方陣 也可以指定對角線位置 arr2d=np.diag([1,2,3,4]) print(arr2d) print(np.arange(1,6)) #類似於range 不包含上界 print(np.arange(1,10,2)) #開始 結束 步長 print(np.linspace(1,10,4)) #開始 結束 個數 print(np.logspace(1,4,4)) #分為4個等分點,形成陣列【1,2,3,4】然後形成 對數的底數的指數 print(np.logspace(1,5,5,base=2)) #指定對數為2#建立座標系 其實可以用plt.show() x=np.linspace(0,1,5) y=np.linspace(0,1,3) xv,yv=np.meshgrid(x,y) print(xv) print(yv) plt.plot(xv,yv,'^') plt.show() #指數圖 x=np.arange(-5,5,0.1) y=np.power(2,x) #print(y) plt.plot(x,y) #對數圖 x=np.power(2,x) y=np.log2(x) plt.plot(x,y) plt.show() x1=np.arange(1,5,1) y1=np.power(x1,3) #x1的3次方 print(y1) x2=np.array([1,8,27,64]) y2=np.power(x2,1/3) #x2的1/3次方 print(y2)
2.陣列的複製等各種操作
import numpy as np #1 賦值 改變原陣列 a=np.array([1,2,3,4,5]) b=a b[0]=100 print(b) print(a) #2 拷貝 不改變原陣列 a1=np.array([1,2,3,4,5]) b1=np.copy(a1) b1[0]=20 print(a1) print(b1) #3 修改 arry=np.array([1,2,3,4,5]) #arry[2]=10 arry[0:2]=8 #包頭不包尾 print(arry) arr1=np.array([[1,2,3,4],[5,6,7,8]]) print(arr1.T) #陣列的轉置 arr1.shape=4,2 print(arr1) #簡單分隔 #4 分隔 arr2=np.arange(0,20,1) print(arr2.reshape(4,5)) newarr2=arr2.reshape(4,5) newarr2[0:2,0]=8 #0行1行 的0列 為8 print(newarr2) #5 newarr3=np.reshape(newarr2,(1,-1)) #行數為1, 列數 待定 print(newarr3) newarr4=np.reshape(newarr2,(-1,1)) #列數為1, 行數 待定 print(newarr4) newarr5=newarr3[0][:,np.newaxis] #取第一行 即一維陣列 在變成一列 print(newarr5) #6 二維陣列轉一維陣列 arr2d=np.arange(1,21,1).reshape(4,5) #4行5列 print(arr2d) arr2d1=np.ravel(arr2d) print(arr2d1) #arr2d1和arr2d共享同一塊記憶體 print(arr2d.flatten()) #不共享記憶體 #7 resize使用 arrresize=np.resize(arr2d,(5,2)) #5行2列 本來有20個元素 只取其中的10個也可以 不像reshape必須全取 print(arrresize) #8 轉置 多維轉換置換 arr3d=np.arange(1,28,1).reshape(3,3,3) print(arr3d) arr3d1=np.transpose(arr3d) print(arr3d1)
3.陣列的修改等各種操作
import numpy as np #1.訪問二維陣列 a=np.arange(1,16,1).reshape(3,5) #3行5列陣列 print(a) print(a[1]) #訪問第一行 print(a[1,1]) #訪問第一行第一列的元素 print(a[1][1]) #訪問第一行第一列的元素 #2.訪問二維陣列部分元素 print('-'*20) b=np.arange(1,16,1).reshape(3,5) #3行5列二維陣列 print(b) print(b[0:1,2:4]) #第一行下標為2和下標為3的元素 print(b[:,3]) #所有行下標為3的列數的所有元素 print(b[:,2:5]) #所有行,2,3,4列元素 #3.刪除元素 print('-'*20) c=np.arange(1,16,1).reshape(3,5) #3行5列二維陣列 print(c) print(np.delete(c,1)) #刪除行號 返回一位陣列 print(np.delete(c,[2,3,8,9])) #返回一位陣列 刪除下標為2,3,8,9的元素 #4.刪除列元素 print('-'*20) d=np.arange(1,16,1).reshape(3,5) #3行5列二維陣列 print(d) print(np.delete(d,1,axis=0)) #刪除下標為1這一行 print(np.delete(d,[2,3],axis=1)) #刪除下標為2和3 的這兩列 #5.插入元素 print('-'*20) e=np.array([[1,2],[3,4],[5,6]]) print(e) print(np.insert(e,1,5)) #返回一維陣列 把5插入到1號索引後 print(np.insert(e,1,5,axis=1)) #插入一列 該列元素全為5 print(np.insert(e,1,[0,2,5],axis=1)) #插入一列 為0,2,5 print(np.insert(e,len(e),[[7,8]],axis=0)) #在最後一列插入一行 print(np.c_[e,np.array([1,1,1])]) #在最後一行後面加一列 print(np.append(e,[[7,8]],axis=0)) #append追加一列
4.陣列的組合拼接等等
import numpy as np #1.陣列的行拼接 a=np.array([[1,2],[3,4]]) b=np.array([[5,6]]) c=np.concatenate((a,b),axis=0) #axis=0 按行 d=np.vstack((a,b)) #行 方法 print(c) print(d) #2.陣列的列拼接 a=np.array([[1,2],[3,4]]) b=np.array([[5],[6]]) c=np.concatenate((a,b),axis=1) #axis=1 按列 要求具有同樣的列數 d=np.hstack((a,b)) #列方法 print(c) print(d) #3.豎直方向將二維陣列拆分成若干個陣列 a=np.arange(1,21,1).reshape(4,5) b=np.split(a,2) c=np.vsplit(a,2) print(b) print(c) #4.水平方向將二維陣列拆分成若干個陣列 a=np.arange(1,21,1).reshape(4,5) b=np.hsplit(a,5) print(b)
5.陣列的查詢,排序,統計
import numpy as np #1.檢查符合條件的元素 a=np.array([1,0,0,3,4,5,0,8]) b=np.nonzero(a) print(b) #不為0的下標 c=a[b] print(c) #輸出不為0的元素 1,3,4,5,8 #2.二維陣列查詢 a=np.array([[1,2,0],[4,0,6],[0,8,9]]) b=np.nonzero(a) c=a[b] print(c) #輸出一維陣列1,2,4,6,8,9 #3.查詢指定條件 a=np.arange(10) print(a) b=np.where(a>5) print(a[b]) #查詢大於5的 #4.返回條件為true a=np.arange(5) b=np.array([True,False,True,True,False]) print(a[b]) #輸出0,2,3 print(b[a]) #5.返回指定索引的若干個元素 a=np.array([4,3,5,7,6,8]) b=np.take(a,[0,1,4]) #返回索引為0,1,4的元素 print(b) #5.陣列排序 a=np.arange(5) print(a[::-1]) #倒序,,-1指定步長為-1 倒數 b=np.array([3,4,1,8,4,9,5,6,9]) print(np.sort(b)) #一維陣列排序 a=np.array([[3,1,5],[2,4,0]]) print(a) b=np.sort(a,axis=0) #沿著行索引增加方向排序,也就是對每一列排序 print(b) c=np.sort(a,axis=1) #沿著列索引增加方向排序,也就是對每一行排序 print(c) #5.分界線排序 a=np.array([30,20,40,50,10,80,50,40,90,76]) b=np.partition(a,0) print(b) #小於30的在左邊 大於30的在右邊 等於也在右邊 c=np.partition(a,6) print(c) #小於50的在左邊 大於50的在右邊 等於也在右邊 #6.陣列統計 a=np.array([1,3,6,2,5,9,8,10,4]) print(a.max()) #最大值 print(np.max(a)) #最大值 print(np.min(a)) #最小值 a=np.arange(1,11,1).reshape(2,5) #2行5列2維陣列 print(a) print(np.max(a)) #所有元素裡面的最大值 print(np.max(a,axis=0)) #行索引 找出每一列的最大值 print(np.max(a,axis=1)) #列索引 找出每一行的最大值 a=np.array([[1,3,9],[2,5,4],[6,7,8]]) print('-'*20) print(np.max(a,axis=0)) #行索引 找出每一列的最大值 print(np.max(a,axis=1)) #列索引 找出每一行的最大值 #查詢極值元素的索引 a=np.array([1,2,0,4,5,3,7,9]) print(np.argmax(a)) #索引號 7 print(np.argmin(a)) #索引號 2 a=np.array([[1,2,3],[6,5,4],[9,7,8]]) #3行3列 print(a) print(np.argmax(a)) print(np.argmax(a,axis=0)) #每一列最大元素的索引 print(np.argmax(a,axis=1)) #每一行最大元素的索引 #計算陣列平均值 a=np.arange(1,13,1).reshape(3,4) print(a) print(np.mean(a)) #輸出 所有數的和的平均值 print(np.mean(a,axis=0)) #每一列的平均值 print(np.mean(a,axis=1)) #每一行的平均值 #計算陣列加權平均值 a=np.arange(1,11) print(a) #輸出1-11的十個數 print(np.mean(a)) #沒加權重 b=np.average(a,weights=np.array([1,3,1,0,0,1,1,0,1,2])) #這是加了權重 print(b)
附上GitHub地址:
https://github.com/tyutltf/numpy_array_basic