📜  NumPy 中的向量化操作

📅  最后修改于: 2022-05-13 01:54:27.079000             🧑  作者: Mango

NumPy 中的向量化操作

Numpy 数组本质上是同质的,这意味着它是一个仅包含单一类型数据的数组。 Python 的列表和元组在它们包含的数据类型上不受限制。 NumPy 上的向量化操作的概念允许对 NumPy 数组对象和数据序列使用更优化和预编译的函数和数学运算。与简单的非向量化操作相比,输出和操作将加快速度。

示例 1:在 NumPy 数组上使用矢量化求和方法。我们将比较向量化求和方法与简单的非向量化操作,即计算 0 到 14,999 数字之和的迭代方法。

Python3
# importing the modules
import numpy as np
import timeit
 
# vectorized sum
print(np.sum(np.arange(15000)))
 
print("Time taken by vectorized sum : ", end = "")
%timeit np.sum(np.arange(15000))
 
# iterative sum
total = 0
for item in range(0, 15000):
    total += item
a = total
print("\n" + str(a))
 
print("Time taken by iterative sum : ", end = "")
%timeit a


Python3
# importing the modules
import numpy as np
import timeit
import math
 
# vectorized operation
print("Time taken by vectorized operation : ", end = "")
%timeit np.exp(np.arange(150))
 
# non-vectorized operation
print("Time taken by non-vectorized operation : ", end = "")
%timeit [math.exp(item) for item in range(150)]


输出 :

与非向量化操作相比,上面的示例显示了 NumPy 的向量化操作的更优化性质。这意味着当计算效率是程序中的关键因素时,我们应该避免使用这些简单的操作,而应该使用 NumPy 向量化函数。

示例 2:这里我们将 NumPy 指数函数与Python内置数学库的指数函数进行比较,以计算特定对象中每个条目的指数值。

Python3

# importing the modules
import numpy as np
import timeit
import math
 
# vectorized operation
print("Time taken by vectorized operation : ", end = "")
%timeit np.exp(np.arange(150))
 
# non-vectorized operation
print("Time taken by non-vectorized operation : ", end = "")
%timeit [math.exp(item) for item in range(150)]

输出 :

在这里,我们可以看到 NumPy 向量化操作在计算值方面更加优化,以及Python数学库的另一个限制,即数学库范围限制,因为它不适合非常大的值,不像 NumPy 向量化操作可以用来计算非常大范围限制的指数值。

上述两个示例证明了 NumPy 向量化函数和操作的最佳性质,在比较和用于代替Python程序或脚本中的简单或非向量化函数或操作时。