[Python]-numpy模块-机器学习Python入门《Python机器学习手册》-01-向量、矩阵和数组

《Python机器学习手册——从数据预处理到深度学习》

这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习中python常用的这些库有更深入的理解,在应用中也能更为熟练。

以下是根据书上的代码进行实操,注释基本写明了每句代码的作用(写在本句代码之前)和print的输出结果(写在print之后)。不一定严格按照书上内容进行,根据代码运行时具体情况稍作顺序调整,也加入了一些自己的理解。

如果复制到自己的环境下跑一遍输出,相信理解会更深刻更清楚。

博客中每个代码块代表一次完整的运行结果,可以直接以此为单位复制并运行。

01-向量、矩阵和数组

本节主要是numpy库的基本应用。
包括:

  1. 初始化与格式
  2. 数据读取与批量处理
  3. 数值计算
  4. 矩阵计算
  5. 随机数

01-1 初始化与格式

import numpy as np

创建一个行向量
vector = np.array([1,2,3])
创建一个列向量
vector = np.array([[1],[2],[3]])
print(vector)
创建一个矩阵
matrix = np.array([[0,0],[2,0],[0,3]])
print(type(matrix)) #<class 'numpy.ndarray'>
&#x67E5;&#x770B;&#x884C;&#x6570;&#x548C;&#x5217;&#x6570;
print(matrix.shape) #(3, 2)
&#x67E5;&#x770B;&#x5143;&#x7D20;&#x6570;&#x91CF;
print(matrix.size) #6
&#x67E5;&#x770B;&#x7EF4;&#x6570;
print(matrix.ndim) #2
&#x8F6C;&#x6362;&#x4E3A;&#x77E9;&#x9635;&#x683C;&#x5F0F;mat
matrix = np.mat(matrix)
print(type(matrix)) #<class 'numpy.matrix'>

from scipy import sparse
&#x8F6C;&#x6362;&#x4E3A;&#x538B;&#x7F29;&#x7684;&#x7A00;&#x758F;&#x884C;&#x77E9;&#x9635;
matrix = sparse.csr_matrix(matrix)
print(matrix)
  (1, 0)        2
  (2, 1)        3
print(type(matrix)) #<class 'scipy.sparse.csr.csr_matrix'>
</class></class></class>

01-2 数据读取与批量处理

import numpy as np

matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
&#x8F93;&#x51FA;&#x77E9;&#x9635;&#x7B2C;&#x4E8C;&#x884C;&#x7B2C;&#x4E09;&#x5217;&#x7684;&#x5143;&#x7D20;&#xFF08;&#x4E0B;&#x6807;&#x4ECE;0&#x5F00;&#x59CB;&#xFF09;
&#x6CE8;&#x610F;&#x6B64;&#x5904;&#x4E0B;&#x6807;&#x4E0E;&#x4E8C;&#x7EF4;list&#x4E0D;&#x540C;
print(matrix[1,2]) # 6

&#x4E00;&#x7EF4;&#x5207;&#x7247;,[&#x8D77;&#x59CB;&#x4F4D;&#x7F6E;:&#x7ED3;&#x675F;&#x4F4D;&#x7F6E;]&#xFF0C;&#x5305;&#x62EC;&#x8D77;&#x59CB;&#x4F4D;&#x7F6E;&#xFF0C;&#x4E0D;&#x5305;&#x62EC;&#x7ED3;&#x675F;&#x4F4D;&#x7F6E;&#x5143;&#x7D20;
&#x8F93;&#x51FA;&#x7B2C;&#x4E09;&#x4E2A;&#x5143;&#x7D20;&#x4E4B;&#x524D;&#x6240;&#x6709;&#x5143;&#x7D20;
vector = np.array([1,2,3])
print(vector[0:2])
[1 2]

&#x4E8C;&#x7EF4;&#x5207;&#x7247;,&#x4E0E;&#x4E00;&#x7EF4;&#x7C7B;&#x4F3C;[&#x8D77;&#x59CB;&#x4F4D;&#x7F6E;:&#x7ED3;&#x675F;&#x4F4D;&#x7F6E;]&#xFF0C;&#x4E0D;&#x540C;&#x7EF4;&#x5EA6;&#x7528;','&#x9694;&#x5F00;
'1:'&#x7B2C;&#x4E8C;&#x884C;&#x53CA;&#x4E4B;&#x540E;&#x6240;&#x6709;&#x884C;
':2'&#x7B2C;&#x4E09;&#x5217;&#x4E4B;&#x524D;&#x6240;&#x6709;&#x5217;
print(matrix[1:,:2])
[[4 5]
 [7 8]]

&#x5BF9;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x4E2D;&#x591A;&#x4E2A;&#x5143;&#x7D20;&#x540C;&#x65F6;&#x5E94;&#x7528;&#x67D0;&#x4E2A;&#x51FD;&#x6570;
&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#xFF0C;add_100&#x8FD4;&#x56DE;&#xFF1A;&#x8F93;&#x5165;&#x503C;+100&#x7684;&#x503C;
add_100 = lambda i : i + 100
&#x521B;&#x5EFA;&#x5411;&#x91CF;&#x5316;&#x51FD;&#x6570;
vectorized_add_100 = np.vectorize(add_100)
&#x5BF9;&#x77E9;&#x9635;&#x6240;&#x6709;&#x5143;&#x7D20;&#x5E94;&#x7528;&#x8FD9;&#x4E2A;&#x51FD;&#x6570;
print(vectorized_add_100(matrix))
[[101 102 103]
 [104 105 106]
 [107 108 109]]

01-3 数值计算

import numpy as np

matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
&#x6C42;&#x77E9;&#x9635;&#x4E2D;&#x6700;&#x5927;&#x7684;&#x5143;&#x7D20;
print(np.max(matrix)) # 9
&#x6C42;&#x77E9;&#x9635;&#x4E2D;&#x6700;&#x5C0F;&#x7684;&#x5143;&#x7D20;
print(np.min(matrix)) # 1
&#x6C42;&#x6BCF;&#x5217;&#x6700;&#x5927;&#x7684;&#x5143;&#x7D20;&#xFF0C;axis&#x6307;&#x7EF4;&#x5EA6;
print(np.max(matrix, axis = 0)) # [7 8 9]
&#x6C42;&#x6BCF;&#x884C;&#x6700;&#x5927;&#x7684;&#x5143;&#x7D20;
print(np.max(matrix, axis = 1)) # [3 6 9]

&#x8BA1;&#x7B97;&#x77E9;&#x9635;&#x7684;&#x5E73;&#x5747;&#x503C;
print(np.mean(matrix)) # 5.0
print(type(np.mean(matrix))) # <class 'numpy.float64'>

&#x8BA1;&#x7B97;&#x77E9;&#x9635;&#x7684;&#x65B9;&#x5DEE;
print(np.var(matrix)) # 6.666666666666667
print(type(np.var(matrix))) # <class 'numpy.float64'>

&#x8BA1;&#x7B97;&#x77E9;&#x9635;&#x7684;&#x6807;&#x51C6;&#x5DEE;
print(np.std(matrix)) # 2.581988897471611
print(type(np.std(matrix))) # <class 'numpy.float64'>

&#x4EE5;&#x4E0A;&#x8BA1;&#x7B97;&#x5747;&#x53EF;&#x4EE5;&#x52A0;&#x53C2;&#x6570;axis&#x6C42;&#x6BCF;&#x884C;&#x6216;&#x6BCF;&#x5217;
&#x6C42;&#x6BCF;&#x884C;&#x7684;&#x5E73;&#x5747;&#x503C;
print(np.mean(matrix, axis = 1)) # [2. 5. 8.]
</class></class></class>

01-4 矩阵计算

01-4-1 矩阵变形与矩阵转置

import numpy as np

matrix = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

&#x77E9;&#x9635;&#x53D8;&#x5F62;&#xFF0C;&#x4E0D;&#x6539;&#x53D8;&#x5143;&#x7D20;&#x503C;&#xFF0C;&#x6539;&#x53D8;&#x77E9;&#x9635;&#x7684;&#x5F62;&#x72B6;
&#x5C06;&#x77E9;&#x9635;&#x4ECE;4*3&#x53D8;&#x4E3A;2*6
print(matrix.shape) # (4, 3)
matrix = matrix.reshape(2,6)
print(matrix.shape) # (2, 6)
print(matrix)
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]]
&#x4E5F;&#x53EF;&#x4EE5;&#x5C06;&#x5176;&#x4E2D;&#x4E00;&#x4E2A;&#x7EF4;&#x5EA6;&#x8BBE;&#x4E3A;&#x9ED8;&#x8BA4;'-1'&#xFF0C;&#x4F1A;&#x81EA;&#x5DF1;&#x53D6;&#x6574;&#x9664;&#x4E4B;&#x540E;&#x7684;&#x6570;&#x4F5C;&#x4E3A;&#x9ED8;&#x8BA4;&#x7EF4;&#x5EA6;
matrix = matrix.reshape(3,-1)
print(matrix.shape) # (3, 4)
print(matrix)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

&#x4EE5;&#x4E0B;&#x4E09;&#x79CD;&#x60C5;&#x51B5;&#x6CE8;&#x610F;&#x533A;&#x522B;&#xFF1A;
&#x60C5;&#x51B5;1
matrix = matrix.reshape(1,-1)
print(matrix.shape) # (1, 12)
print(matrix)
[[ 1  2  3  4  5  6  7  8  9 10 11 12]]
&#x60C5;&#x51B5;2
matrix = matrix.reshape(3,-1)
print(matrix.shape) # (3, 4)
matrix = matrix.reshape(matrix.size)
print(matrix.shape) # (12,)
print(matrix)
[ 1  2  3  4  5  6  7  8  9 10 11 12]
&#x60C5;&#x51B5;3
&#x5C55;&#x5F00;&#x77E9;&#x9635;
matrix = matrix.reshape(3,-1)
print(matrix.shape) # (3, 4)
matrix = matrix.flatten()
print(matrix.shape) # (12,)
print(matrix)
[ 1  7  2  8  3  9  4 10  5 11  6 12]

&#x77E9;&#x9635;&#x8F6C;&#x7F6E;
matrix = matrix.reshape(2,6)
print(matrix.shape) # (2, 6)
print(matrix)
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]]
matrix = matrix.T
print(matrix.shape) # (6, 2)
print(matrix)
[[ 1  7]
 [ 2  8]
 [ 3  9]
 [ 4 10]
 [ 5 11]
 [ 6 12]]

01-4-2 矩阵的秩、行列式、迹、特征值与特征向量

import numpy as np

matrix = np.array([[1,1,3],[2,2,6],[3,3,9]])
print(matrix)
[[1 1 3]
 [2 2 6]
 [3 3 9]]

&#x77E9;&#x9635;&#x7684;&#x79E9; r(A)
print(np.linalg.matrix_rank(matrix)) # 1

&#x77E9;&#x9635;&#x7684;&#x884C;&#x5217;&#x5F0F; det(A)&#x6216;|A|
print(np.linalg.det(matrix)) # 0.0

&#x77E9;&#x9635;&#x7684;&#x5BF9;&#x89D2;&#x7EBF;&#x5143;&#x7D20; tr(A)
print(np.diagonal(matrix)) # [1 2 9]
&#x53EF;&#x4EE5;&#x5F15;&#x5165;&#x53C2;&#x6570;offset&#x5BF9;&#x4E3B;&#x5BF9;&#x89D2;&#x7EBF;&#x4E0A;&#x4E0B;&#x504F;&#x79FB;
&#x5411;&#x4E0A;&#x504F;&#x79FB;
print(np.diagonal(matrix, offset = 1)) # [1 6]
&#x5411;&#x4E0B;&#x504F;&#x79FB;
print(np.diagonal(matrix, offset = -1)) # [2 3]

&#x77E9;&#x9635;&#x7684;&#x8FF9; tr(A)&#xFF0C;&#x5373;&#x5BF9;&#x89D2;&#x7EBF;&#x5143;&#x7D20;&#x4E4B;&#x548C;
print(np.trace(matrix)) # 12
&#x540C;&#x6837;&#x53EF;&#x4EE5;&#x5BF9;&#x4E3B;&#x5BF9;&#x89D2;&#x7EBF;&#x8FDB;&#x884C;&#x504F;&#x79FB;
print(np.trace(matrix, offset = 1)) # 7

matrix = np.array([[-2,1,1],[0,2,0],[-4,1,3]])
&#x77E9;&#x9635;&#x7684;&#x7279;&#x5F81;&#x503C;&#x548C;&#x7279;&#x5F81;&#x5411;&#x91CF;
eigen_values, eigen_vectors = np.linalg.eig(matrix)
&#x7279;&#x5F81;&#x503C;
print(eigen_values)
[-1.  2.  2.]
&#x7279;&#x5F81;&#x5411;&#x91CF;
print(eigen_vectors)
[[-0.70710678 -0.24253563  0.30151134]
 [ 0.          0.          0.90453403]
 [-0.70710678 -0.9701425   0.30151134]]

01-4-3 矩阵的加减、乘法和矩阵的逆

import numpy as np

mat_1 = np.array([[1,1,2],[1,1,2],[1,1,2]])
mat_2 = np.array([[1,2,1],[1,2,1],[1,2,1]])

&#x77E9;&#x9635;&#x76F8;&#x52A0;
print(np.add(mat_1, mat_2))
[[2 3 3]
 [2 3 3]
 [2 3 3]]
print(mat_1 + mat_2)
[[2 3 3]
 [2 3 3]
 [2 3 3]]

&#x77E9;&#x9635;&#x76F8;&#x51CF;
print(np.subtract(mat_1, mat_2))
[[ 0 -1  1]
 [ 0 -1  1]
 [ 0 -1  1]]
print(mat_1 - mat_2)
[[ 0 -1  1]
 [ 0 -1  1]
 [ 0 -1  1]]

&#x77E9;&#x9635;&#x4E58;&#x6CD5;
print(np.dot(mat_1, mat_2))
[[4 8 4]
 [4 8 4]
 [4 8 4]]
print(mat_1 @ mat_2)
[[4 8 4]
 [4 8 4]
 [4 8 4]]

&#x77E9;&#x9635;&#x5BF9;&#x5E94;&#x5143;&#x7D20;&#x76F8;&#x4E58;
print(mat_1 * mat_2)
[[1 2 2]
 [1 2 2]
 [1 2 2]]

&#x77E9;&#x9635;&#x7684;&#x9006; A-1
mat = np.array([[0,1],[1,0]])
print(np.linalg.inv(mat))
[[0. 1.]
 [1. 0.]]

&#x9A8C;&#x8BC1;&#xFF1A;A*(A-1) = I
print(mat @ np.linalg.inv(mat))
[[1. 0.]
 [0. 1.]]

01-5 随机数

import numpy as np

&#x8BBE;&#x8BA1;&#x968F;&#x673A;&#x6570;&#x79CD;&#x5B50;
np.random.seed(0)
&#x751F;&#x6210;3&#x4E2A;0.0&#x5230;1.0&#x4E4B;&#x95F4;&#x7684;&#x968F;&#x673A;&#x6570;
rand = np.random.random(3)
print(rand) # [0.5488135  0.71518937 0.60276338]

&#x751F;&#x6210;3&#x4E2A;1&#x5230;10&#x4E4B;&#x95F4;&#x7684;&#x968F;&#x673A;&#x6574;&#x6570;
rand = np.random.randint(0, 11, 3)
print(rand) # [3 7 9]

&#x4ECE;&#x5747;&#x503C;&#x4E3A;0&#xFF0C;&#x6807;&#x51C6;&#x5DEE;&#x4E3A;1&#x7684;&#x6B63;&#x6001;&#x5206;&#x5E03;&#x4E2D;&#x62BD;&#x53D6;3&#x4E2A;&#x6570;
rand = np.random.normal(0, 1, 3)
print(rand) # [-1.42232584  1.52006949 -0.29139398]

&#x4ECE;&#x5747;&#x503C;&#x4E3A;0&#xFF0C;&#x6563;&#x5E03;&#x7A0B;&#x5EA6;&#x4E3A;1&#x7684;logistic&#x5206;&#x5E03;&#x4E2D;&#x62BD;&#x53D6;3&#x4E2A;&#x6570;
rand = np.random.logistic(0, 1, 3)
print(rand) # [-0.98118713 -0.08939902  1.46416405]

&#x4ECE;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;1&#xFF0C;&#x5C0F;&#x4E8E;2&#x7684;&#x8303;&#x56F4;&#x4E2D;&#x62BD;&#x53D6;3&#x4E2A;&#x6570;
rand = np.random.uniform(1, 2, 3)
print(rand) # [1.47997717 1.3927848  1.83607876]

Original: https://www.cnblogs.com/camilia/p/16163048.html
Author: CAMILIA
Title: [Python]-numpy模块-机器学习Python入门《Python机器学习手册》-01-向量、矩阵和数组

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683335/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球