numpy用法歸納
1.生成數組
import numpy as np
把python列表轉換為數組
>>> np.array([1, 2, 3])
array([1, 2, 3])
把python的range對象轉換為數組
>>> range(5)
range(0, 5)
生成等差數組
>>> np.linspace(0, 10, 5)
array([ 0. , 2.5, 5. , 7.5, 10. ])
對數數組
>>> np.logspace(0, 10, 2)
array([ 1.00000000e+00, 1.00000000e+10])
全0數組
>>> np.zeros((3, 3))
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
全1數組
>>> np.ones((2, 2))
array([[ 1., 1.],
[ 1., 1.]])
單位矩陣
>>> np.identity(2)
array([[ 1., 0.],
[ 0., 1.]])
空數組,只申請空間而不初始化,元素值不確定
>>> np.empty((2, 2))
array([[ 1., 1.],
[ 1., 1.]])
2.數組與數值的算術運算
數組可以直接與數值進行加減乘除運算,對應的是數組裏每個元素與數值進相應的運算
3.數組與數組的算術運算
數組與數組相乘
>>> a = np.array([1, 2, 3])
>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))
>>> a*b
array([[ 1, 4, 9],
[ 4, 10, 18],
[ 7, 16, 27]])
一維數組與二維數組的運算,相當於把一維數組的維度看作一個整體向量與二維數組的第一維度中每個對應向量進行運算,並且運算的是針對兩個向量中的對應每個元素進行運算,註意這兩個運算的向量的維度需要相同
數組與數組的加減除運算規律如上相同
4.二維數組轉置
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b.T
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
註意一維數組轉置後和原理是一樣的
5.向量內積
>>> a = np.array(([1, 2], [3, 4]))
>>> b = np.array(([5, 6], [7, 8]))
>>> a.dot(b)
array([[19, 22],
[43, 50]])
6.數組元素訪問
創建等差數組
>>> arr = np.arange(0, 100, 10, dtype=np.floating)
>>> arr
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.])
生成5個隨機整數作為下標
>>> index = np.random.randint(0, len(arr), 5)
>>> index
array([5, 4, 2, 2, 8])
同時訪問多個元素的值
>>> arr[index]
array([ 50., 40., 20., 20., 80.])
同時修改多個下標指定的元素值
>>> arr[index] = [1, 2, 3, 4, 5]
>>> arr
array([ 0., 10., 4., 30., 2., 1., 60., 70., 5., 90.])
7.對數組進行函數運算
np.sin(arr)
np.cos(arr)
np.round(_) # 四舍五入
np.floor(arr) # 所有元素向下取整
np.ceil(arr) # 所有元素向上取整
8.對矩陣不同維度上的元素進行計算
np.sum(arr, axis=0) # 二維數組縱向求和
np.mean(arr, axis=1) # 二維數組橫向計算算術平均值
np.average(arr, axis=0, weights=weight) #二維數組縱向計算加權平均值
np.max(arr, axis=0) # 二維數組每列最大
np.std(arr, axis=1) # 每行元素的標準差
np.var(arr, axis=0) # 每列元素的標準差
np.sort(arr, axis=0) # 縱向排序
9.改變數組大小
>>> a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> a.shape = 2, 5
>>> a
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
>>> a.shape = 5, -1
>>> a
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
>>> b = a.reshape(2, -1)
>>> b
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
10.切片操作
>>> b
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
>>> b[1][::2]
array([ 6, 8, 10])
其他切片方式與列表切片相似
11.布爾運算
>>> b
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
>>> b > 5
array([[False, False, False, False, False],
[ True, True, True, True, True]], dtype=bool)
>>> a = np.random.rand(5)
>>> b = np.random.rand(5)
>>> a
array([ 0.35153042, 0.7211572 , 0.01421697, 0.80853614, 0.00126357])
>>> b
array([ 0.54159521, 0.14100028, 0.24689119, 0.40688594, 0.60708272])
>>> a > b
array([False, True, False, True, False], dtype=bool)
12.廣播
>>> a = np.arange(0, 100, 20).reshape(-1, 1)
>>> a
array([[ 0],
[20],
[40],
[60],
[80]])
>>> b = np.arange(0, 5)
>>> b
array([0, 1, 2, 3, 4])
>>> a + b
array([[ 0, 1, 2, 3, 4],
[20, 21, 22, 23, 24],
[40, 41, 42, 43, 44],
[60, 61, 62, 63, 64],
[80, 81, 82, 83, 84]])
>>> a*b
array([[ 0, 0, 0, 0, 0],
[ 0, 20, 40, 60, 80],
[ 0, 40, 80, 120, 160],
[ 0, 60, 120, 180, 240],
[ 0, 80, 160, 240, 320]])
13.分段函數
>>> b
array([0, 1, 2, 3, 4])
>>> np.where(b > 1)
(array([2, 3, 4], dtype=int64),)
>>> np.where(b > 1, 0, 1)
array([1, 1, 0, 0, 0])
小於2的元素乘以2的冪次方,大於等於3的元素乘以2+2,沒有選擇到的元素為返回0
>>> np.piecewise(b, [b < 2, b >=3], [lambda x:x ** 2, lambda x: x*2 + 2])
array([ 0, 1, 0, 8, 10])
14.計算唯一值以及出現次數
>>> a
array([3, 5, 0, 5, 7, 8, 9, 6, 6, 9])
統計出現的次數
>>> np.bincount(a)
array([1, 0, 0, 1, 0, 2, 2, 1, 1, 2], dtype=int64)
返回唯一值,消去重復
>>> np.unique(a)
array([0, 3, 5, 6, 7, 8, 9])
15.矩陣運算
>>> a = np.random.random((2, 2))*100 % 10
>>> a
array([[ 7.14583047, 4.97659447],
[ 4.54034887, 4.28307445]])
>>> mat = np.matrix(a)
>>> mat
matrix([[ 7.14583047, 4.97659447],
[ 4.54034887, 4.28307445]])
>>> mat.sum()
20.945848263382267
>>> mat.max()
7.1458304748163357
>>> mat.shape
(2, 2)
>>> mat.size
4
>>> mat.mean()
5.2364620658455667
>>> mat.argsort(axis=0)
matrix([[1, 1],
[0, 0]], dtype=int64)
>>> mat.argsort(axis=1)
matrix([[1, 0],
[1, 0]], dtype=int64)
>>> mat.diagonal()
matrix([[ 7.14583047, 4.28307445]])
numpy用法歸納