NumPy Vectorize简介
Python为用户提供了不同的函数。为了进行矢量化工作,python库提供了一个numpy函数。NumPy vectorize接受numpy数组或不同对象的分层顺序作为系统的输入,并生成单个numpy数组或多个numpy数组。在连续的多个数组输入后,NumPy vectorize像python map函数一样评估pyfunc,它有助于定义numpy规则。我们使用numpy vectorization代替循环来提高速度。数组在数据科学中扮演着重要的角色,速度很重要。基本上,numpy是一个开源的项目。在python中,numpy的速度比列表快。因此,可以有效地进行处理和操作。
NumPy Vectorize的语法
vectorize_funcunction = np.vectorize (function, parameter 1, parameter 2….. parameter N)
解释
在上面的语法中,vectorize_function是一个函数名,np.vectorize是一个numpy类,function是一个带参数的用户定义的函数。我们在numpy向量中使用的参数如下。
Numpy vectorize的不同参数如下。
1. pyfunc
它用于定义Python的函数和方法,而且必须是必需的。因此,它是一个可调用的参数。
2. otypes
otypes是指输出数据类型,它是可选的。在otypes中,它应该被指定为一个指定的数据类型列表,或者是一个类型代码字符的字符串。对于每个输出,必须有一个数据指定。
3.doc
doc是docstring的一个可选参数。如果doc中没有,那么docstring将是pyfunc_doc_str。
4.排除
这是一个可选的参数。这个参数由一组字符串或整数组成,代表将不被矢量化的函数的位置参数或关键字参数。一组字符串或整数将被直接传递给 pyfunc 而不作任何修改。
5. 缓存
cache 是一个可选的参数。它将缓存第一个函数的调用,如果没有给出True和otype,它一般决定了输出的数量。
6.签名
它是一个可选的参数。它是一个泛化的通用函数。例如,(a, b), (b) -> (a)它用于矢量化的矩阵-向量函数的乘法。在任何时候,Pyfunc都将被调用(并且必须返回),其形状由看焦点估计的大小所决定的数组。默认情况下,Pyfunc被期望接受标量作为输入以及输出。
矢量化函数在NumPy中是如何工作的?
- 我们必须在你的系统上安装Python。
- 我们必须使用pip命令安装numpy。
- 我们需要关于Python的基本知识。
- 我们需要关于数组的基本知识。
- 我们可以使用numpy vectorize函数进行不同的操作。
让我们看看我们如何在一个数组上实现numpy vectorize函数。但是,首先,我们看看矢量化和非矢量化的实现之间有什么区别。
1.矢量化的实现
它主要与矩阵有关。在vectorize实现中,我们执行巨大的算法,如机器学习算法和神经语言算法。
例子
import numpy as np
import time
no = 100000
x = np.random.random(no)
y = np.random.random(no)
start = time.time()
z = np.dot(x,y)
end = time.time()
print("Vectorize :" + str((end-start)*1000)+ 'ms')
解释
在上面的例子中,我们用一个数组实现了numpy的向量化功能。在这个程序中,我们使用了两个数组,x和y,其中有随机数,然后我们用点积的方式来实现x和y数组的乘法。此外,我们还计算了使用vectorize的x和y数组的总执行时间。因此,vectorize函数需要最少的执行时间。通过使用下面的快照来说明上述声明的最终结果。
2.非矢量化的实现
在这个实现中,我们使用了一个循环来实现非矢量化实现与矢量化实现相比,需要更多的时间来执行。
例子:
import numpy as np
import time
no= 100000
x=np.random.random(no)
y=np.random.random(no)
start = time.time()
z=0
for i in range(no):
z += x[i] + y[i] end=time.time()
print("Loop :" + str((end-start)*1000)+ 'ms')
解释
在上面的例子中,我们实现了一个非矢量化的numpy。在这个例子中,我们使用了一个循环来实现。在这里我们使用了Loop而不是Vectorize。结果是,非矢量化需要更多的时间。通过使用下面的快照来说明上述声明的最终结果。
Example: numpy vectorize函数
import numpy as np
def func1(c, d):
if c > d:
return c - d
else:
return c + d
vfun = np.vectorize(func1)
z=vfun([4, 3, 5, 2], 1)
print(z)
解释一下:
在这个例子中,我们实现了numpy矢量化。我们定义了一个vectorize函数,其中m和n是参数。上例中使用的vectorize函数减少了代码的长度。在这个例子中,vfun直接对数组进行了操作。通过使用下面的快照来说明上述声明的最终结果。
例子:numpy vectorize docstring
import numpy as np
def func1(p, q):
vecfunc.__doc__
vecfunc = np.vectorize(func1, doc="welcome to python")
a=vecfunc.__doc__
print(a)
解释:
对于矢量化,除非指定了docstring,否则会从输入函数中获得docstring。通过使用下面的快照来说明上述声明的最终结果。
例子:Excluded
import numpy as np
def pval(x, y):
_x = list(x)
res = _x.pop(0)
while _x:
res = res*y + _x.pop(0)
return res
vect_pval = np.vectorize(pval, excluded=['x'])
z=vect_pval(x=[2, 4, 5], y=[1, 2])
print(z)
解释:
排除是用来停止对某些参数的矢量化。在这个例子中,我们实现了polyval中的多项式。最后,通过使用下面的快照来说明上述声明的最终结果。
以类似的方式,我们可以实现其余的参数,如otype和签名,并在numpy vectorize的帮助下执行不同的操作。
总结
我们希望通过这篇文章你已经了解了numpy vectorize函数。从上面的文章中,我们已经学会了numpy vectorize函数的基本语法。我们还学习了如何通过每个参数的不同例子在Python中实现它们。在矢量化函数的帮助下,我们减少了算法的执行时间。从这篇文章中,我们已经学会了如何在Python中处理numpy vectorize。