Numpy中Array用法總結
阿新 • • 發佈:2018-11-12
Numpy中array(陣列)
Numpy主要物件是齊次多維陣列,由正整數元組索引,Numpy中維度稱為軸(axis),陣列的維數稱為秩(rank)。
1.1 建立陣列
常規方法建立陣列
import numpy as np
#一維陣列
a=np.array([2,3,4])
b=np.array([2.,3.,4.])
#二維陣列
c=np.array([[1.,2.],[3.,4.]])
d=np.array([[1,2],[3,4]],dtype=complex)
print(a,a.dtype)
print(b,b.dtype)
print(c,c.dtype)
print(d,d.dtype)
#>>>[2 3 4] int64
#>>>[2. 3. 4.] float64
#>>>[[1. 2.]
[3. 4.]] float64
#>>>[[1.+0.j 2.+0.j]
[3.+0.j 4.+0.j]] complex128
利用函式建立陣列
#建立陣列的常用函式 np.arange(0,7,1,dtype=float) #arange函式建立 np.ones((2,3,4),dtype=int) #建立2頁3行4列的資料 np.zeros((2,3,4)) #建立2頁3行4列的零矩陣 np.linspace(-1,2,5) #起點為1,終點為2,取5個數 np.random.randint(-9,3,(2,3)) #生成兩行三列,大小為-9,3)之間的隨機整數
1.2 修改資料
#一維陣列
a=np.arange(0,10,1)**2
#>>>array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
a[-1]=100 #單個賦值
#>>>array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 100])
a[1:4]=100 #批量賦值
#>>>array([ 0, 100, 100, 100, 16, 25, 36, 49, 64, 100])
b=[np.sqrt(np.abs(i)) for i in a] #通過a迴圈遍歷賦值
print(b)
#>>>[0.0, 10.0, 10.0, 10.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0]
1.3 陣列輸出
- 從左到右,從上到下
- 一維陣列輸出為行,二維陣列輸出為矩陣,三維陣列輸出為矩陣列表
1.4 基本運算
數值運算&矩陣運算
元素級運算(一維陣列)
a=np.arange(1,5,1)
b=np.array([0,1,2,3])
a-b #對應相減
#>>>array([1, 1, 1, 1])
a*b #對應相乘
#>>>array([ 0, 2, 6, 12])
a**2 #求平方
#>>>array([ 1, 4, 9, 16])
np.sin(a)*5 #三角函式
#array([ 4.20735492, 4.54648713, 0.70560004, -3.78401248])
a>3 #判斷值
#array([False, False, False, True])
np.exp(a) #指數
#>>>array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003])
統計計算
#均值
a=np.random.randint(0,5,(2,3))
print(a.sum(),a.sum(0),a.sum(axis=0)) #分別對矩陣和列求和
print(a.mean(),a.min(1),a.std(1)) #分別對矩陣和行求均值、最小值及標準差
np.median(a) #求中位數
#>>>13 [3 5 5] [3 5 5]
#>>>2.1666666666666665 [1 2] [0. 0.94280904]
#>>>1.5
矩陣運算(二維陣列)
a=np.array([[1,2],[3,4]])
b=np.arange(6).reshape(2,-1) #生成2行矩陣
print(a,'\n',b)
a.dot(b) #矩陣的乘法
1.5 索引/切片/遍歷
#一維陣列
a=np.arange(0,10,1)**2
#>>>[ 0 1 4 9 16 25 36 49 64 81]
#陣列的索引切片原理和List等類似:索引從0開始,-1代表最後一個索引;左閉右開原則
print(a[2],a[-1]) #取某個值
#>>>4 81
print(a[-3:-1]) #切片取值
#>>>array([49, 64])
#二維陣列
c=np.arange(0,20,1).reshape(4,-1)
print('第二行:',c[1],'\n二到四列:',c[:,1:4],'\n二到四行的第三列',c[1:4,2],
'\n第二行:',c[1,:])
#遍歷輸出
for i in a:
print(i)
1.6 形狀操作
a=10*np.random.random((3,4)) #隨機產生大小在0-1之間的3行4列的數
b=np.floor(a) #擷取整數部分
b.ravel() #一維化操作(一行)
b.shape=(6,-1) #改變形狀
b.transpose() #轉置
1.7 刪除
#一維陣列中刪除元素
a=np.arange(1,5,1)
print(a)
#>>>[1 2 3 4]
a=np.delete(a,0) #刪除a中第一個元素
print(a)
#>>>[2 3 4]
#二維陣列中刪除元素
#注:在刪除裡axis=0
b=np.arange(0,10,1).reshape(2,-1)
print(b)
#>>>[[0 1 2 3 4]
# [5 6 7 8 9]]
b=np.delete(b,1,axis=0) #刪除b中第2行元素
print(b)
#>>>[[0 1 2 3 4]]
如果對於本文中程式碼或資料有任何疑問,歡迎評論或私信交流