为什么对np.vectorize(function) 传入的元素数量看起来比实际执行的次数要多?
我在研究 numpy.vectorize。我定义了一个函数 f,它接收一个输入,打印 hi {input},然后原样返回该输入。
import numpy as np
def f(x):
print(f"hi {x}")
return x
当我调用:
print(np.vectorize(f)(["input"]))
我期望得到:
hi input
['input']
然而,我得到的是:
hi input
hi input
['input']
似乎 f 被执行了两次,尽管 np.vectorize 收到了一个长度为1 的列表。
如何解释向量化函数看起来执行次数过多?
换句话说,更具体地说,在这个场景下:我想知道为什么会得到 hi input 两次。
解决方案
该函数会被调用两次以确定输出的数量。
numpy.vectorize 文档(注):
如果既未指定otypes,也未指定signature,那么将使用对第一个参数的函数调用来确定输出的数量。若cache设置为True,则此次调用的结果会被缓存,以防止对函数进行两次调用。然而,为实现缓存,必须对原始函数进行包装,这会降低后续调用的速度,因此只有在你的函数计算成本较高时才这么做。
指定类型将防止第二次调用:
print(np.vectorize(f, otypes=[object])(["input"]))
将 cache 设置为 True:
print(np.vectorize(f, cache=True)(["input"]))
它们两者都会输出
hi input
['input']
你也可以指定签名:
print(np.vectorize(f, signature="(m)->(m)")(["input"]))
这将输出
hi ['input']
['input']
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。