[筆記] numpy 用法 (1) 宣告與基本運算
numpy 用法 (1)
安裝:
pip3 install numpy
pip3 install numpy
numpy array
import numpy as np
array = np.array([[1,2,3],
[4,5,6]])
print(array)
print('number of dim:',array.ndim)
print('shape',array.shape)
print('size:',array.size)
''' output
[[1 2 3]
[4 5 6]]
('number of dim:', 2)
('shape', (2, 3))
('size:', 6)
'''
- 定義資料格式
# 使用 dtype 定義資料格式
a = np.array([2,33,4],dtype=np.int)
print(a) # [ 2 33 4]
print(a.dtype) # int64
a = np.array([2,33,4],dtype=np.int32)
print(a.dtype) # int32
a = np.array([2,33,4],dtype=np.float)
print(a.dtype) # float64
a = np.array([2,33,4],dtype=np.float32)
print(a.dtype) # float32
- array 的各種宣告方法
# 宣告全部是 0 的 array
zeros = np.zeros( (3,4) )
print(zeros)
'''output
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
'''
# 宣告全部是 1 的 array 同樣可以使用 dtype 定義資料型態
ones = np.ones( (4,3), dtype=np.int16 )
print(ones)
'''output
[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]
'''
# 宣告 empty 等同於得到一個幾乎接近 0 的 array
empty = np.empty((3,4))
print(empty)
''' output
[[ 0.00000000e+000 4.94065646e-324 9.88131292e-324 1.48219694e-323]
[ 1.97626258e-323 2.47032823e-323 2.96439388e-323 3.45845952e-323]
[ 3.95252517e-323 4.44659081e-323 4.94065646e-323 5.43472210e-323]]
'''
# 宣告有序陣列
a = np.arange(10,20,2)
print(a) # [10 12 14 16 18]
# 宣告 0 ~ 11 得陣列,形狀為 3x4
a = np.arange(12).reshape( (3,4) )
print(a)
'''output
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
# 宣告一個等分的線段 array
a = np.linspace(1,10,5) # 起點 1 終點 10,分 5 等份
print(a) # [ 1. 3.25 5.5 7.75 10. ]
# 宣告等分的線段 array 並且排列成 2x3
a = np.linspace(1,10,6).reshape(2,3) # 起點 1 終點 10,分 6 等份
print(a)
'''output
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
'''
import numpy as np
array = np.array([[1,2,3],
[4,5,6]])
print(array)
print('number of dim:',array.ndim)
print('shape',array.shape)
print('size:',array.size)
''' output
[[1 2 3]
[4 5 6]]
('number of dim:', 2)
('shape', (2, 3))
('size:', 6)
'''
# 使用 dtype 定義資料格式
a = np.array([2,33,4],dtype=np.int)
print(a) # [ 2 33 4]
print(a.dtype) # int64
a = np.array([2,33,4],dtype=np.int32)
print(a.dtype) # int32
a = np.array([2,33,4],dtype=np.float)
print(a.dtype) # float64
a = np.array([2,33,4],dtype=np.float32)
print(a.dtype) # float32
# 宣告全部是 0 的 array
zeros = np.zeros( (3,4) )
print(zeros)
'''output
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
'''
# 宣告全部是 1 的 array 同樣可以使用 dtype 定義資料型態
ones = np.ones( (4,3), dtype=np.int16 )
print(ones)
'''output
[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]
'''
# 宣告 empty 等同於得到一個幾乎接近 0 的 array
empty = np.empty((3,4))
print(empty)
''' output
[[ 0.00000000e+000 4.94065646e-324 9.88131292e-324 1.48219694e-323]
[ 1.97626258e-323 2.47032823e-323 2.96439388e-323 3.45845952e-323]
[ 3.95252517e-323 4.44659081e-323 4.94065646e-323 5.43472210e-323]]
'''
# 宣告有序陣列
a = np.arange(10,20,2)
print(a) # [10 12 14 16 18]
# 宣告 0 ~ 11 得陣列,形狀為 3x4
a = np.arange(12).reshape( (3,4) )
print(a)
'''output
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
# 宣告一個等分的線段 array
a = np.linspace(1,10,5) # 起點 1 終點 10,分 5 等份
print(a) # [ 1. 3.25 5.5 7.75 10. ]
# 宣告等分的線段 array 並且排列成 2x3
a = np.linspace(1,10,6).reshape(2,3) # 起點 1 終點 10,分 6 等份
print(a)
'''output
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
'''
numpy 矩陣 (array) 運算
矩陣當中,到底行,列的方向是什麼?
英文:
- row: 橫的
- column: 直的
中文:
- 台灣: 直行橫列
- row: 列
- column: 行
- 大陸: 直列橫行
- row: 行
- column: 列
由於中文實在是太混亂了,以下我只要解釋到行列相關的一律採用英文 row, column
-
對於矩陣中所有元素運算
# coding=utf-8
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b) # [10 20 30 40] [0 1 2 3]
# 對於每個元素取平方
c = b**2
print(c) # [0 1 4 9]
s = 10*np.sin(a)
print(s) # [-5.44021111 9.12945251 -9.88031624 7.4511316 ]
# 比較運算
print(b) # [0 1 2 3]
print(b<3) # [ True True True False]
print(b==3) # [False False False True]
-
矩陣與矩陣之間的運算
# coding=utf-8
import numpy as np
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape((2,2))
print(a)
# [[1 1]
# [0 1]]
print(b)
#[[0 1]
# [2 3]]
# 逐一相乘
print(a*b)
# [[0 1]
# [0 3]]
# 矩陣乘法 (以下兩種寫法是相等的)
print(np.dot(a,b))
print(a.dot(b))
#[[2 4]
# [2 3]]
-
找矩陣當中的總和,最大值,最小值
# coding=utf-8
import numpy as np
# 宣告隨機生成的 array
a = np.random.random((2,4))
print(a)
# [[ 0.44842423 0.78949907 0.8370462 0.44611223]
# [ 0.14324946 0.26730942 0.45553012 0.20880903]]
# 求矩陣元素總和
print(np.sum(a)) # 3.59597976167
# 求矩陣元素最小值
print(np.min(a)) # 0.14324946148
# 求矩陣元素最大值
print(np.max(a)) # 0.837046196628
-
使用 axis 針對矩陣中的行或列找總和,最大值,最小值
# coding=utf-8
import numpy as np
# 使用 axis 針對矩陣中的 row, column 做運算
a = np.array([[1,2,3],
[9,0,6]])
# 求矩陣 row 元素總和
print(np.sum(a,axis=1)) # [ 6 15]
# 1 + 2 + 3 = 6
# 9 + 0 + 6 = 15
# 求矩陣 column 元素最小值
print(np.min(a,axis=0)) # [1 0 3]
# min(1,9) = 1
# min(2,0) = 0
# min(3,6) = 3
# 求矩陣 row 元素最大值
print(np.max(a,axis=1)) # [3 9]
# max(1,2,3) = 3
# max(9,0,6) = 9
-
計算矩陣的平均值與中位數
#coding=utf-8
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# 平均值
print(np.mean(a)) # 7.5
print(a.mean()) # 7.5
print(np.average(a)) # 7.5
# 搭配 axis 可以得到:
# axis = 0: 針對逐 column 的平均值
print(np.mean(a,axis=0)) # [ 6. 7. 8. 9.]
'''
mean of (2,6,10) = 6
mean of (3,7,11) = 7
mean of (4,8,12) = 8
mean of (5,9,13) = 9
'''
# axis = 1: 針對逐 row 的平均值
print(np.mean(a,axis=1)) # [ 3.5 7.5 11.5]
'''
mean of (2,3,4,5) = 3.5
mean of (6,7,8,9) = 7.5
mean of (10,11,12,13) = 11.5
'''
# 中位數
print(np.median(a)) # 7.5
-
逐步累加 (cumsum) 與逐步差 (diff)
#coding=utf-8
import numpy as np
# 逐步累加
print(np.cumsum(a)) # [ 2 5 9 14 20 27 35 44 54 65 77 90]
# 2
# 2 + 3 = 5
# 2 + 3 + 4 = 9
# 依此類推
# 逐步累差
print(np.diff(a))
'''
[[1 1 1]
[1 1 1]
[1 1 1]]
'''
-
矩陣的排序 sort 與 transpose
#coding=utf-8
import numpy as np
a = np.random.random((3,4))
print(a)
'''
[[ 0.99821757 0.22533492 0.90690435 0.40504797]
[ 0.73937987 0.776222 0.60485253 0.44401583]
[ 0.33139018 0.14091604 0.81036999 0.74671883]]
'''
print(np.sort(a))
''' 效果:逐列排序
[[ 0.22533492 0.40504797 0.90690435 0.99821757]
[ 0.44401583 0.60485253 0.73937987 0.776222 ]
[ 0.14091604 0.33139018 0.74671883 0.81036999]]
'''
# 矩陣的 transpose
print(np.transpose(a))
'''
[[ 0.99821757 0.73937987 0.33139018]
[ 0.22533492 0.776222 0.14091604]
[ 0.90690435 0.60485253 0.81036999]
[ 0.40504797 0.44401583 0.74671883]]
'''
-
clip 功能簡介,可以拿來篩選過濾用
#coding=utf-8
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# clip 功能
print(np.clip(a,5,9)) # 意思:所有小於等於 5 的數都用 5 代替; 所有大於等於 9 的數都用 9 代替
'''
[[5 5 5 5]
[6 7 8 9]
[9 9 9 9]]
'''
矩陣當中,到底行,列的方向是什麼?
英文:
英文:
- row: 橫的
- column: 直的
中文:
- 台灣: 直行橫列
- row: 列
- column: 行
- 大陸: 直列橫行
- row: 行
- column: 列
對於矩陣中所有元素運算
# coding=utf-8
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b) # [10 20 30 40] [0 1 2 3]
# 對於每個元素取平方
c = b**2
print(c) # [0 1 4 9]
s = 10*np.sin(a)
print(s) # [-5.44021111 9.12945251 -9.88031624 7.4511316 ]
# 比較運算
print(b) # [0 1 2 3]
print(b<3) # [ True True True False]
print(b==3) # [False False False True]
矩陣與矩陣之間的運算
# coding=utf-8
import numpy as np
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape((2,2))
print(a)
# [[1 1]
# [0 1]]
print(b)
#[[0 1]
# [2 3]]
# 逐一相乘
print(a*b)
# [[0 1]
# [0 3]]
# 矩陣乘法 (以下兩種寫法是相等的)
print(np.dot(a,b))
print(a.dot(b))
#[[2 4]
# [2 3]]
找矩陣當中的總和,最大值,最小值
# coding=utf-8
import numpy as np
# 宣告隨機生成的 array
a = np.random.random((2,4))
print(a)
# [[ 0.44842423 0.78949907 0.8370462 0.44611223]
# [ 0.14324946 0.26730942 0.45553012 0.20880903]]
# 求矩陣元素總和
print(np.sum(a)) # 3.59597976167
# 求矩陣元素最小值
print(np.min(a)) # 0.14324946148
# 求矩陣元素最大值
print(np.max(a)) # 0.837046196628
使用 axis 針對矩陣中的行或列找總和,最大值,最小值
# coding=utf-8
import numpy as np
# 使用 axis 針對矩陣中的 row, column 做運算
a = np.array([[1,2,3],
[9,0,6]])
# 求矩陣 row 元素總和
print(np.sum(a,axis=1)) # [ 6 15]
# 1 + 2 + 3 = 6
# 9 + 0 + 6 = 15
# 求矩陣 column 元素最小值
print(np.min(a,axis=0)) # [1 0 3]
# min(1,9) = 1
# min(2,0) = 0
# min(3,6) = 3
# 求矩陣 row 元素最大值
print(np.max(a,axis=1)) # [3 9]
# max(1,2,3) = 3
# max(9,0,6) = 9
計算矩陣的平均值與中位數
#coding=utf-8
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# 平均值
print(np.mean(a)) # 7.5
print(a.mean()) # 7.5
print(np.average(a)) # 7.5
# 搭配 axis 可以得到:
# axis = 0: 針對逐 column 的平均值
print(np.mean(a,axis=0)) # [ 6. 7. 8. 9.]
'''
mean of (2,6,10) = 6
mean of (3,7,11) = 7
mean of (4,8,12) = 8
mean of (5,9,13) = 9
'''
# axis = 1: 針對逐 row 的平均值
print(np.mean(a,axis=1)) # [ 3.5 7.5 11.5]
'''
mean of (2,3,4,5) = 3.5
mean of (6,7,8,9) = 7.5
mean of (10,11,12,13) = 11.5
'''
# 中位數
print(np.median(a)) # 7.5
逐步累加 (cumsum) 與逐步差 (diff)
#coding=utf-8
import numpy as np
# 逐步累加
print(np.cumsum(a)) # [ 2 5 9 14 20 27 35 44 54 65 77 90]
# 2
# 2 + 3 = 5
# 2 + 3 + 4 = 9
# 依此類推
# 逐步累差
print(np.diff(a))
'''
[[1 1 1]
[1 1 1]
[1 1 1]]
'''
矩陣的排序 sort 與 transpose
#coding=utf-8
import numpy as np
a = np.random.random((3,4))
print(a)
'''
[[ 0.99821757 0.22533492 0.90690435 0.40504797]
[ 0.73937987 0.776222 0.60485253 0.44401583]
[ 0.33139018 0.14091604 0.81036999 0.74671883]]
'''
print(np.sort(a))
''' 效果:逐列排序
[[ 0.22533492 0.40504797 0.90690435 0.99821757]
[ 0.44401583 0.60485253 0.73937987 0.776222 ]
[ 0.14091604 0.33139018 0.74671883 0.81036999]]
'''
# 矩陣的 transpose
print(np.transpose(a))
'''
[[ 0.99821757 0.73937987 0.33139018]
[ 0.22533492 0.776222 0.14091604]
[ 0.90690435 0.60485253 0.81036999]
[ 0.40504797 0.44401583 0.74671883]]
'''
clip 功能簡介,可以拿來篩選過濾用
#coding=utf-8
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
# [[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
# clip 功能
print(np.clip(a,5,9)) # 意思:所有小於等於 5 的數都用 5 代替; 所有大於等於 9 的數都用 9 代替
'''
[[5 5 5 5]
[6 7 8 9]
[9 9 9 9]]
'''
留言
張貼留言