numpy 矩阵乘法_一起学习Python常用模块——numpy
關注微信公眾號:一個數據人的自留地
作者介紹
知乎@王多魚
百度的一名推薦算法攻城獅。
主要負責商品推薦的召回和排序模型的優化工作。
1
前言
Python在數據科學、機器學習、AI領等域中占據主導地位,目前對于數據分析師和算法工程師來說是必備技能。
對于數據分析師來說,應掌握基礎語法和數據科學的模塊,主要包括:pandas、numpy和機器學習庫sklearn等。
對于算法工程師來說,還應掌握深度學習相關模塊,主要包括:tensorflow、pytorch等。
Python語法簡單,入門容易,Numpy是Python中科學計算的核心庫。它提供了一個高性能的多維數組對象,以及用于處理這些數組的工具。如果你想要進入Python中的數據科學或機器學習,你就要必須學習它。
一起入坑學習吧~
2
加載Numpy庫
import numpy as np3
array結構
NumPy 的數組類(array class)叫做 ndarray,同時我們也常稱其為數組(array)。注意 numpy.array 和標準 Python 庫中的類 array.array 是不同的。標準 Python 庫中的類 array.array 只處理一維的數組,提供少量的功能。ndarray 還具有如下很多重要的屬性:
ndarray.ndim:顯示數組的軸線數量(或維度)。
ndarray.shape:顯示在每個維度里數組的大小。如 n 行 m 列的矩陣,它的 shape 就是(n, m)。
一起嘗試創建6個不同維度的array,如下:
a = np.array([1, 2, 3])b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype = float)c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype = float)d = np.arange(10,25,5)e = np.full((2, 2), 7)f = np.eye(2) print("a: \n", a)print("\nb: \n", b)print("\nc: \n", c)print("\nd: \n", d)print("\ne: \n", e)print("\nf: \n", f) """結果:a: [1 2 3]b: [[1.5 2. 3. ] [4. 5. 6. ]]c: [[[1.5 2. 3. ] [4. 5. 6. ]] [[3. 2. 1. ] [4. 5. 6. ]]]d: [10 15 20]e: [[7 7] [7 7]]f: [[1. 0.] [0. 1.]]"""4
查看abc的屬性
print("a的維度: ", a.shape)print("\na的長度: ", len(a))print("\nb的維度數量: ", b.ndim)print("\nb的元素數量: ", b.size)print("\nb的元素類型: ", b.dtype)print("\nc的元素類型名稱: ", c.dtype.name)print("\n轉換c的元素類型為int型: \n", c.astype(int)) """結果:a的維度: (3,)a的長度: 3b的維度數量: 2b的元素數量: 6b的元素類型: float64c的元素類型名稱: float64轉換c的元素類型為int型: [[[1 2 3] [4 5 6]] [[3 2 1] [4 5 6]]]"""5
創建數組的函數
print("\n創建3x4的0矩陣: \n", np.zeros((3,4)))print("\n創建2x3x4的1矩陣: \n", np.ones((2,3,4), dtype=np.int16))print("\n創建以10開始,以25結束,兩個數間隔為5的數組: \n", np.arange(10,23,5)) #Create an array of evenly, spaced values (step value)print("\n創建以0開始,以2結束,間隔數為(2-0)/(9-1)長度為9的數組: \n", np.linspace(0,2,9)) #Create an array of evenly, spaced values (number of samples)print("\n創建2x2的7矩陣: \n", np.full((2,2),7))print("\n創建2x2的單位矩陣: \n", np.eye(2))print("\n創建2x2的隨機數矩陣: \n", np.random.random((2,2)))print("\n創建3x2的空矩陣: \n", np.empty((3,2))) """結果:創建3x4的0矩陣: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]創建2x3x4的1矩陣: [[[1 1 1 1] [1 1 1 1] [1 1 1 1]] [[1 1 1 1] [1 1 1 1] [1 1 1 1]]]創建以10開始,以25結束,兩個數間隔為5的數組: [10 15 20]創建以0開始,以2結束,間隔數為(2-0)/(9-1)長度為9的數組: [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]創建2x2的7矩陣: [[7 7] [7 7]]創建2x2的單位矩陣: [[1. 0.] [0. 1.]]創建2x2的隨機數矩陣: [[0.0681172 0.75448098] [0.92933939 0.70908987]]創建3x2的空矩陣: [[1.39069238e-309 1.39069238e-309] [1.39069238e-309 1.39069238e-309] [1.39069238e-309 1.39069238e-309]]"""6
Numpy的基礎運算
# 基礎運算# (1)加法add_result1 = b + aadd_result2 =np.add(b,a)print("\n加法1的結果: \n", add_result1)print("\n加法2的結果: \n", add_result2) # (2)減法subtract_result1 = a - bsubtract_result2 = np.subtract(a,b)print("\n減法1的結果: \n", subtract_result1)print("\n減法2的結果: \n", subtract_result2) # (3)乘法multiply_result1 = a * bmultiply_result2 = np.multiply(a,b)print("\n乘法1的結果: \n", multiply_result1)print("\n乘法2的結果: \n", multiply_result2) # (4)除法divide_result1 = a / bdivide_result2 = np.divide(a,b)print("\n除法1的結果: \n", divide_result1)print("\n除法2的結果: \n", divide_result2) # (5) 指數函數print("\n矩陣b的指數結果: \n", np.exp(b)) # (6)平方根函數print("\n矩陣b的平方根結果: \n", np.sqrt(b)) # (7)正弦函數print("\n數組a的正弦結果: \n", np.sin(a)) # (8)余弦函數print("\n矩陣b的余弦結果: \n", np.cos(b)) # (9)對數函數print("\n數組a的對數結果: \n", np.log(a)) # (10)矩陣乘法print("\n矩陣e與矩陣f的矩陣乘法結果: \n", e.dot(f)) """結果:加法1的結果: [[2.5 4. 6. ] [5. 7. 9. ]]加法2的結果: [[2.5 4. 6. ] [5. 7. 9. ]]減法1的結果: [[-0.5 0. 0. ] [-3. -3. -3. ]]減法2的結果: [[-0.5 0. 0. ] [-3. -3. -3. ]]乘法1的結果: [[ 1.5 4. 9. ] [ 4. 10. 18. ]]乘法2的結果: [[ 1.5 4. 9. ] [ 4. 10. 18. ]]除法1的結果: [[0.66666667 1. 1. ] [0.25 0.4 0.5 ]]除法2的結果: [[0.66666667 1. 1. ] [0.25 0.4 0.5 ]]矩陣b的指數結果: [[ 4.48168907 7.3890561 20.08553692] [ 54.59815003 148.4131591 403.42879349]]矩陣b的平方根結果: [[1.22474487 1.41421356 1.73205081] [2. 2.23606798 2.44948974]]數組a的正弦結果: [0.84147098 0.90929743 0.14112001]矩陣b的余弦結果: [[ 0.0707372 -0.41614684 -0.9899925 ] [-0.65364362 0.28366219 0.96017029]]數組a的對數結果: [0. 0.69314718 1.09861229]矩陣e與矩陣f的矩陣乘法結果: [[7. 7.] [7. 7.]]"""7
Numpy的聚合函數
Numpy有很多有用的統計函數,用于從數組中給定的元素中查詢最大、最小、標準差等。
print("\n數組a的和:?\n",?np.sum(a))print("\n數組a的最小值: \n", np.min(a))print("\n矩陣b在axis=0維度上的最大值: \n", np.max(b, axis=0))print("\n矩陣b在axis=0維度上的累加值: \n", np.cumsum(b, axis=0))print("\n數組a的平均值: \n", np.mean(a))print("\n矩陣b的全局中位數: \n", np.median(b))print("\n數組a自身的皮爾遜積矩相關系數: \n", np.corrcoef(a))print("\n矩陣b的全局標準差: \n", np.std(b))print("\n矩陣b在axis=1維度上的標準差: \n", np.std(b, axis=1)) """結果:數組a的和: 6數組a的最小值: 1矩陣b在axis=0維度上的最大值: [4. 5. 6.]矩陣b在axis=0維度上的累加值: [[1.5 2. 3. ] [5.5 7. 9. ]]數組a的平均值: 2.0矩陣b的全局中位數: 3.5數組a自身的皮爾遜積矩相關系數: 1.0矩陣b的全局標準差: 1.5920810978785667矩陣b在axis=1維度上的標準差: [0.62360956 0.81649658]"""8
索引數組的方法
(1)整數組索引
print("數組a的第3個元素: ", a[2])print("矩陣b的第2行第3列的元素: ", b[1, 2]) """結果:數組a的第3個元素: 3矩陣b的第2行第3列的元素: 6.0"""表現在圖中,即為:
(2)切片(Slicing):與Python列表類似,可以對numpy數組進行切片。由于數組可能是多維的,因此必須為數組的每個維指定一個切片:
print("\n數組a的前2個元素: \n", a[0:2])print("\n矩陣b的前2行的第2列的元素: \n", b[0:2, 1])print("\n矩陣b的第一行的元素: \n", b[:1])print("\n矩陣c的第0維的第2列的元素: \n", c[1,...])print("\n數組a反轉: \n", a[::-1]) """結果:數組a的前2個元素: [1 2]矩陣b的前2行的第2列的元素: [2. 5.]矩陣b的第一行的元素: [[1.5 2. 3. ]]矩陣c的第0維的第2列的元素: [[3. 2. 1.] [4. 5. 6.]]數組a反轉: [3 2 1]"""(3)布爾型索引
print("數組a的小于2的元素: ", a[a<2])print("矩陣b的大于4的元素: ", b[b>4]) """結果:數組a的小于2的元素: [1]矩陣b的大于4的元素: [5. 6.]"""(4)Fancy索引
9
Array常用操作
Numpy中數組的連接函數主要有如下3個:
concatenate:?沿著現存的軸連接數據vstack: 豎直堆疊數據(行方向)hstack: 水平堆疊數據(列方向)10
線性代數API
如下僅展示了簡單的矩陣運算更多詳細的方法可在實踐中遇到在查找 API。如下展示了矩陣的轉置、求逆、單位矩陣、矩陣乘法、矩陣的跡、解線性方程和求特征向量等基本運算。
import numpy as np a = np.array([[1.0, 2.0], [3.0, 4.0]])print(a)"""[[ 1. 2.] [ 3. 4.]]""" a.transpose()"""array([[ 1., 3.], [ 2., 4.]])""" np.linalg.inv(a)"""array([[-2. , 1. ], [ 1.5, -0.5]])""" u = np.eye(2) # unit 2x2 matrix; "eye" represents "I"print(u)"""array([[ 1., 0.], [ 0., 1.]])""" j = np.array([[0.0, -1.0], [1.0, 0.0]])print(np.dot (j, j)) # matrix product"""array([[-1., 0.], [ 0., -1.]])""" print(np.trace(u)) # trace# 2.0 y = np.array([[5.], [7.]])print(np.linalg.solve(a, y))"""array([[-3.], [ 4.]])""" print(np.linalg.eig(j))"""(array([ 0.+1.j, 0.-1.j]), array([[0.70710678+0.j, 0.70710678-0.j], [0.00000000-0.70710678j, 0.00000000+0.70710678j]]))"""一個數據人的自留地是一個助力數據人成長的大家庭,幫助對數據感興趣的伙伴們明確學習方向、精準提升技能。
掃碼關注我,帶你探索數據的神奇奧秘
我知道你在看喲
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的numpy 矩阵乘法_一起学习Python常用模块——numpy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git for windows_干货分享
- 下一篇: python做游戏代码_利用Python