NumPy中的矢量操作

NumPy中的矢量操作

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

实例1:在NumPy数组上使用矢量求和方法。我们将比较矢量求和法与简单的非矢量操作,即迭代法来计算0-14999的数字之和。

# 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

输出 :

NumPy中的矢量操作

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

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

# 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的矢量操作在计算值方面更加优化,而且伴随着Python数学库的一个限制,即数学库的范围限制,因为它不适合非常大的数值,不像NumPy的矢量操作可以用来计算非常大范围限制的指数值。

以上两个例子证明了NumPy矢量函数和操作的最佳性质,当在python程序或脚本中比较和使用简单或非矢量函数或操作时。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程