📜  NumPy 中的向量化操作(1)

📅  最后修改于: 2023-12-03 14:44:48.582000             🧑  作者: Mango

NumPy 中的向量化操作

NumPy 是 Python 中用于科学计算的基础库之一,其中最强大的功能之一就是向量化操作。在计算机领域,向量化是指使用数组操作来替代循环操作的方法。在 NumPy 中,这种方法显著地提高了代码的效率和性能。

什么是向量化操作?

向量化操作是指利用 NumPy 数组(numpy.ndarray)的特殊能力,避免使用 Python 中的循环,从而提高代码的速度和简便性。在 Python 中,循环很容易使用,但一般的 Python 循环不能够处理大量的数据。但是,NumPy的数组提供了对数据进行向量化操作的机制,以便更快地完成计算。

举个例子:想要将一个列表中的每个元素加 1,可以这样写循环:

a = [1, 2, 3, 4, 5]
for i in range(len(a)):
    a[i] = a[i] + 1

但是,如果用 NumPy 数组,可以直接做:

a = np.array([1, 2, 3, 4, 5])
a = a + 1

这就是向量化操作。

为什么要使用向量化操作?

向量化操作可以使程序更具有可读性并且执行速度更快。与自己编写循环相比,使用向量化操作可以写出更短、更清晰且更易读的代码。在 NumPy 中,向量化操作也可以自动化一些相对复杂的计算。

此外,向量化操作还可以更加高效地使用 NumPy 默认的并行计算机制,使 NumPy 代码能够在现代多核系统中充分利用并行执行的能力。

如何使用向量化操作?

向量化操作的核心是基于 NumPy 数组进行的,因此需要先创建 NumPy 数组。

创建 NumPy 数组

可以使用 Python 列表进行 NumPy 数组的创建,并将其转换为 NumPy.ndarray 类型:

import numpy as np

a = np.array([1, 2, 3, 4, 5])

也可以直接像这样创建一个全是零的 5x5 的二维数组:

b = np.zeros((5, 5))

除了创建全是零的数组,还可以创建全是一的、随机数的数组,并支持各种数据类型。

NumPy 中的算术操作

对于 NumPy 数组,可以使用各种算术操作进行运算,包括加减乘除、指数、对数等等。

import numpy as np

a = np.ones(5) * 2
b = np.ones(5) * 4

print(a + b)
# 输出:[6. 6. 6. 6. 6.]

print(a - b)
# 输出:[-2. -2. -2. -2. -2.]

print(a * b)
# 输出:[8. 8. 8. 8. 8.]

print(b / a)
# 输出:[2. 2. 2. 2. 2.]

print(a ** 3)
# 输出:[8. 8. 8. 8. 8.]
NumPy 中的逻辑运算

在 NumPy 中,可以使用逻辑运算对数组进行比较,并返回一个布尔类型的数组。

import numpy as np

a = np.ones(5) * 2
b = np.ones(5) * 4

print(a == b)
# 输出:[False  False  False  False  False]

print(a > 3)
# 输出:[False  False  False  False  False]

print(b < 3)
# 输出:[False  False  False  False  False]
NumPy 中的统计计算

NumPy 还支持一些统计计算,包括求和、平均值、方差等。

import numpy as np

a = np.array([1, 2, 3, 4, 5])

print(a.sum())
# 输出:15

print(a.mean())
# 输出:3.0

print(a.std())
# 输出:1.41421356

print(a.var())
# 输出:2.0
NumPy 中的广播机制

在 NumPy 中,向量化操作的另一个重要概念是广播(broadcasting)。广播可以帮助将两个不同形状的数组进行计算,从而使得向量化操作更加灵活方便。

广播的机制是:当两个数组的某一个维度长度不同或者其中一个数组的某一维长度为1时,这两个数组就可以进行广播计算。

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])

print(a + b)
# 输出:
# [[ 0  1  2]
#  [10 11 12]
#  [20 21 22]
#  [30 31 32]]
总结

向量化操作是一种非常强大的计算方式。使用 NumPy 中的向量化操作可以:

  • 使代码更加简洁易读
  • 提高代码的执行效率和性能
  • 利用 NumPy 数组的并行计算机制加速计算过程。

对于 Python 和数据科学的工作者来说,掌握向量化操作是一项必修技能。