04-numpy广播机制

numpy广播入门

不同形状和维度的数组在某些情况下, numpy可以执行加减乘除的运算,这种机制就叫做广播机制

1
2
3
4
import numpy as np
a = np.arange(3)
b = 1
a + b

1570091992902

1
2
3
a = np.arange(6).reshape(2, 3)
b = np.array([0, 1, 2])
a + b

1570092036047

1
2
3
a = np.arange(6).reshape(2, 3)
b = np.array([0, 1]).reshape(2, 1)
a + b

1570092108129

1
2
3
a = np.arange(6).reshape(2, 3)
b = 2
a + b

1570092160104

1
2
3
a = np.array([0, 3]).reshape(2, 1)
b = np.array([0, 1, 2])
a + b

1570092936825

1
2
3
4
a = np.arange(6).reshape(2, 3)
b = np.array([0, 1, 2, 3])
a + b
# 维度mismatch

1570093031773

numpy案例

地铁梯度票价表

1570093411014

兴东 留仙洞 西丽 大学城 塘朗 长岭陂 深圳北站
0 2.7km 3.9km 4.9km 8.6km 10.1km 12.7km

深圳地铁票价规则:

起步价前4公里2元;以后4公里至12公里部分,每1元可乘坐4公里;12公里至24公里部分,每1元可乘坐6公里;超过24公里,每1元可乘坐8公里

1
2
3
4
import numpy as np
distances = np.array([0,2.7,3.9,4.9,8.6,10.1,12.7])
dd = distances - distances.reshape(7,1)
np.where(dd>0 ,dd ,0)
1
2
3
4
5
6
7
array([[ 0. ,  2.7,  3.9,  4.9,  8.6, 10.1, 12.7],
       [ 0. ,  0. ,  1.2,  2.2,  5.9,  7.4, 10. ],
       [ 0. ,  0. ,  0. ,  1. ,  4.7,  6.2,  8.8],
       [ 0. ,  0. ,  0. ,  0. ,  3.7,  5.2,  7.8],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  1.5,  4.1],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  2.6],
       [ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ]])