【发布时间】:2020-07-04 22:33:16
【问题描述】:
我正在尝试将简单代码转换为矢量化器。我是这个概念的新手。
我尝试过使用np.vectorize 选项,但它会引发错误:
你能帮我解决这个问题吗?有没有其他更好的方法来矢量化它?
代码:
def test(s,m):
mean_matrix=s
m2=s/m // forming an array
result=[]
for x in m2:
return x/5
s=np.random.random(50)
m=np.random.random(100)
temp=np.vectorize(test,otypes=[np.float],cache=False)
out = temp(s,m)
【问题讨论】:
-
numpy.vectorize 的原理是能够对输入数组的连续元组应用函数。例如,如果您有一个仅将标量作为输入的函数,您将能够将其应用于向量。在您的情况下,您不想使用此函数,因为
test函数已经是一个向量化函数,因为它接受向量。 -
如果你有一个函数
test使得result[i]=test(s[i],m[i]),那么使用 numpy.vectorize 会是一个好主意。这不是这里的配置,因为test需要整个s向量来计算平均值。 -
np.vectorize不会执行您所寻求的速度增强“矢量化”。您对otypes的使用告诉我您阅读了它的文档,但显然您错过了性能免责声明。 -
np.vectorize将标量参数传递给您的函数,因此当您尝试s[0]时会出现抱怨。otypes确定返回 dtype,但对输入不做任何事情。在开发这样的代码时,最好检查输入参数的类型/形状/dtype。
标签: python numpy loops conditional-statements vectorization