什么是 NumPy 的向量化能力?今天番茄加速就来讲一下。
理解 NumPy 的向量化能力,这正是赋予它简洁的重要原因之一。使用 Python 原生 API 会经常写些 for,但是 NumPy 让它变得不再需要,NumPy 一切都是按照向量计算。如下计算小于 3 的元素置 0,否则置为 1:
# 使用 Python 原生
a = [10,4,-6,3,5,1]
# 小于 3 的元素置为 0,不小于 3 的元素置为 1
b = []
for i in a:
b.append(0 if i < 3 else 1)
print(b)
使用 NumPy 的 where 方法,语法更加简洁,看不到 for 语句,符合 Python 哲学:
# 使用 NumPy
na = np.array(a)
# 一行代码
b = np.where(na < 3, 0, 1)
print(b)
处理多维数组,NumPy 的索引和切片更强大,如下 na < 3 得到布尔索引,一切都按照向量化操作:
na = np.array([10,4,-6,3,5,1])
na[na < 3]
# 结果如下:
# array([-6, 1])
# 创建二维数组
np.random.randint(1,10,size=(3,4))
c2 = np.random.randint(1,10,size=(3,4))
c2
array([[3, 2, 9, 9],
[9, 5, 2, 4],
[8, 1, 2, 4]])
# 更强大简洁的切片功能:
c2[:2,1:3]
array([[2, 9],
[5, 2]])
学习 NumPy,不可能不与广播打交道,广播机制必须要理解。