>

LoeiJe

:D 获取中...

何以解忧?唯有暴富

numpy学习笔记

numpy学习笔记

可以看到,虽然两者的维度并不相同,但是Numpy还是根据两者的维度,自动将它们进行扩展然后进行计算。

对于 Numpy 来说,维度匹配当且仅当:

  • 维度相同
  • 有一个的维度是1

匹配会从最后一维开始进行,直到某一个的维度全部匹配为止,因此对于以下情况,Numpy 都会进行相应的匹配:

A B Result
3d array: 256 x 256 x 3 1d array: 3 3d array: 256 x 256 x 3
4d array: 8 x 1 x 6 x 1 3d array: 7 x 1 x 5 3d array: 8 x 7 x 6 x 5
3d array: 5 x 4 x 3 1d array: 1 3d array: 5 x 4 x 3
3d array: 15 x 4 x 13 1d array: 15 x 1 x 13 3d array: 15 x 4 x 13
2d array: 4 x 1 1d array: 3 2d array: 4 x 3

匹配成功后,Numpy 会进行运算得到相应的结果。

当然,如果相应的维度不匹配,那么Numpy会报错:

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
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 2019-10-23
# numpy 学习笔记
# icenaive
# 参考: https://github.com/lijin-THU/notes-python
# 仅供个人学习使用
#
# 18. 数组广播机制
import numpy as np

# 正常的加法
a = np.array([[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b = np.array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
print(a + b)

b = np.array([0, 1, 2])
print(a + b)
# 结果一样 虽然两个数组的维数不一样,但是numpy检测到b与a的维度匹配
# 所以将b扩展到了与a相同的维度得到相同的形状
# 对于更高的维度 依然有效
a = np.array([0, 10, 20, 30])
a.shape = 4, 1
print(a)
print(b, a + b)
# 可以看到,虽然两者的维度并不相同,但是Numpy还是根据两者的维度,
# 自动将它们进行扩展然后进行计算。
# 对于 Numpy 来说,维度匹配当且仅当:
#
# 维度相同
# 有一个的维度是1
# 匹配会从最后一维开始进行,直到某一个的维度全部匹配为止,
# 因此对于以下情况,Numpy 都会进行相应的匹配:

# 例子
x = np.linspace(-.5, .5, 21)
y = x[:, np.newaxis]
print(y)
print(x.shape, y.shape)

radius = np.sqrt(x ** 2 + y ** 2)
print(radius)
import matplotlib.pyplot as plt
plt.imshow(radius)
plt.show()