Python-Numpy中Array用法總結

Numpy中array(數組)

Numpy主要對象是齊次多維數組,由正整數元組索引,Numpy中維度稱爲軸(axis),數組的維數稱爲秩(rank)。
Array/Series/DataFrame對比學習

可以參考:Numpy快速入門
Numpy基本特點及常用操作

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

利用函數創建數組
arange/ones/zeros/linspace/random.randint

#創建數組的常用函數
np.arange(0,7,1,dtype=float) #arange函數創建
>>>array([0., 1., 2., 3., 4., 5., 6.])

np.ones((2,3,4),dtype=int) #創建2頁3行4列的數據
>>>array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]])

np.zeros((2,3,4)) #創建2頁3行4列的零矩陣
>>>array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])

np.linspace(-1,2,5) #起點爲-1,終點爲2,取5個數
>>>array([-1.  , -0.25,  0.5 ,  1.25,  2.  ])

np.random.randint(-9,3,(2,3)) #生成兩行三列,大小爲[-9,3)之間(左閉右開)的隨機整數
>>>array([[-4, -8, -9],
       [-4, -9,  1]])

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. 從左到右,從上到下
  2. 一維數組輸出爲行,二維數組輸出爲矩陣,三維數組輸出爲矩陣列表

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 2]
 [3 4]] 
 [[0 1 2]
 [3 4 5]]
array([[ 6,  9, 12],
       [12, 19, 26]])

1.5 索引/切片/遍歷

數組的索引切片原理和List等類似:索引從0開始,-1代表最後一個索引;左閉右開原則

#一維數組
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])

#遍歷輸出
for i in a:
    print(i)
>>>
0
1
4
9
16
25
36
49
64
81

#二維數組
c=np.arange(0,20,1).reshape(4,-1)
print('第二行:',c[1],'\n二到四列:\n',c[:,1:4],'\n二到四行的第三列',c[1:4,2],
      '\n第二行:',c[1,:])
>>>
第二行: [5 6 7 8 9] 
二到四列:
 [[ 1  2  3]
 [ 6  7  8]
 [11 12 13]
 [16 17 18]] 
二到四行的第三列 [ 7 12 17] 
第二行: [5 6 7 8 9]

1.6 形狀操作

a=10*np.random.random((3,4)) #隨機產生大小在0-1之間的3行4列的數
>>>
>array([[1.61359796, 9.556233  , 8.80181351, 3.54740817],
       [6.32344717, 5.30891265, 4.84778884, 8.27223197],
       [3.85746314, 2.93382628, 1.62288255, 6.7528529 ]])
       
b=np.floor(a) #截取整數部分
>>>
>array([[1., 3., 9., 2.],
       [2., 7., 4., 8.],
       [2., 7., 5., 1.]])
       
b.ravel() #一維化操作(一行)
>>>
>array([1., 3., 9., 2., 2., 7., 4., 8., 2., 7., 5., 1.])

b.shape=(6,-1) #改變形狀
>>>
>array([[1., 3.],
       [9., 2.],
       [2., 7.],
       [4., 8.],
       [2., 7.],
       [5., 1.]])
       
b.transpose() #轉置
>>>
>array([[1., 9., 2., 4., 2., 5.],
       [3., 2., 7., 8., 7., 1.]])

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]]
b=np.delete(b,1,2) #刪除b中值爲2的元素
print(b)
#>>>[[0 1 3 4]]

如果對於本文中代碼或數據有任何疑問,歡迎評論或私信交流

相近文章:
Pandas中Series用法總結
Pandas中DataFrame用法總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章