numpy數組用法大全


機器學習的最基礎模塊就是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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM