Numpy科学计算库
# 创建数组的常用方法
# 将整型列表转成数组
a = np.array([1, 2, 3])
print(a)
print(a.dtype)
# 将二维整型列表转成数组
c = np.array([[1, 2, 3], [4, 5, 6]])
print(c)
# 生成2行3列的全0数组
print(np.zeros((2, 3)))
# 生成3行4列全是1的数组
print(np.ones((3, 4), dtype=np.int16))
# 生成2行3列随机数
print(np.empty([2, 3]))
# 生成从哪到哪步长为多少的数组
print(np.arange(10, 30, 1))
# 生成3行2列符合(0,1)均匀分布的随机数数组
print(np.random.rand(3, 2))
# 生成0到2范围内长度为5的随机整型数组
print(np.random.randint(0, 3, size=5))
# 生成一组符合标准正态分布的随机数数组
print(np.random.randn(3))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 数组的索引与切片
# 一维数组方法测试
# 创建一个10以内的数组
a = np.arange(10)
print(a)
# 数组元素平方
a = a ** 2
print(a)
# 获取数组第3个元素
print(a[3])
# 获取第2个到第4个数组元素
print(a[1:4])
# 一维数组翻转
print(a[::-1])
# 多维数组方法测试
b = np.random.random((3, 3))
print(b)
# 获取第2行第3列的数组元素
print(b[1, 2])
# 获取第2列数据
print(b[:, 1])
# 获取第3列前2行数据
print(b[:2, 2])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 数组的基本运算
a = np.arange(4)
print(a)
b = np.array([5, 10, 15, 20])
print(b)
# 两个数组做减法运算
print(b-a)
# 计算数组的平方
print(b ** 2)
# 计算数组的正弦
print(np.sin(a))
# 数组的逻辑运算
print(b < 20)
# 求数组的方差
print(np.mean(b))
# 求数组的均值
print(np.var(b))
# 数组线性代数运算
A = np.array([[1, 1], [0, 1]])
print(A)
B = np.array([[2, 0], [3, 4]])
print(B)
# 矩阵元素乘法
print(A * B)
# 矩阵乘法
print(A.dot(B))
# 矩阵求逆矩阵
print(np.linalg.inv(A))
# 矩阵求行列式
print(np.linalg.det(A))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 数组维度变换
a = np.floor(10 * np.random.random((3, 4)))
print(a)
# 查看数组维度
print(a.shape)
# 数组展平
print(a.ravel())
# 将数组变换为2x6的数组
print(a.reshape(2, 6))
# 求数组的转置
print(a.T)
# -1表示numpy会自动计算该维度
print(a.reshape(3,-1))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 数组合并与切分
A = np.array([[1, 1], [0, 1]])
print(A)
B = np.array([[2, 0], [3, 4]])
print(B)
# 垂直合并数组,或者也叫按列合并数组
print(np.vstack((A,B)))
# 水平合并数组,或者也叫按行合并数组
print(np.hstack((A, B)))
# 创建一个4X4的矩阵
C = np.arange(16.0).reshape(4, 4)
print(C)
# 按照水平方向将数组C切分成两个数组
print(np.hsplit(C, 2))
# 按照垂直方向将数组C切分成两个数组
print(np.vsplit(C, 2))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# np.random.shuffle函数
shuffle()是不能直接访问的,可以导入numpy.random模块,然后通过 numpy.random静态对象调用该方法,shuffle直接在原来的数组上进行操作,改变原来数组的顺序,无返回值。
是对列表x中的所有元素随机打乱顺序,若x不是列表,则报错。
arr = np.arange(10)
np.random.shuffle(arr)
print(arr)
# 输出:[2 4 0 1 8 7 3 6 5 9]
1
2
3
4
2
3
4
# np.random.seed函数
seed( )用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
num = 0
while (num < 5):
np.random.seed(5)
print(np.random.random())
num += 1
# 0.22199317108973948
# 0.22199317108973948
# 0.22199317108973948
# 0.22199317108973948
# 0.22199317108973948
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
num = 0
np.random.seed(5)
while (num < 5):
print(np.random.random())
num += 1
# 0.22199317108973948
# 0.8707323061773764
# 0.20671915533942642
# 0.9186109079379216
# 0.48841118879482914
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
可以看到,和上一份代码的运行结果不同。这里每次的输出结果都是不一样的。这也就提醒了我们在以后编写代码的时候要明白一点:random.seed(something)只能是一次有效。其实仔细想想也很自然,如果不是一次有效,比如说是一直有效,那岂不是会影响到后续的代码中随机数的选取?
# np.randdom.RandomState.rand()
# 返回[0,1)之间的随机数
rdm = np.random.RandomState(seed=1)
a = rdm.rand() # 返回一个随机标量
b = rdm.rand(2, 3) # 返回维度为2行3列随机数矩阵
print("a:", a)
print("b:", b)
# a: 0.417022004702574
# b: [[7.20324493e-01 1.14374817e-04 3.02332573e-01]
# [1.46755891e-01 9.23385948e-02 1.86260211e-01]]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 生成网络坐标点函数
# 生成网格坐标点
x, y = np.mgrid[1:3:1, 2:4:0.5]
# np.c_[] 使返回的间隔数值点配对
grid = np.c_[x.ravel(), y.ravel()] # x.ravel函数将多维数组变成一维数组
print("x:", x)
print("y:", y)
print("grid:\n", grid)
# x: [[1. 1. 1. 1.]
# [2. 2. 2. 2.]]
# y: [[2. 2.5 3. 3.5]
# [2. 2.5 3. 3.5]]
# grid:
# [[1. 2. ]
# [1. 2.5]
# [1. 3. ]
# [1. 3.5]
# [2. 2. ]
# [2. 2.5]
# [2. 3. ]
# [2. 3.5]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
编辑 (opens new window)
上次更新: 2025/02/10, 20:20:37