You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何np.vectorize包装的函数执行次数多于输入元素数量?

为什么numpy.vectorize会让函数执行两次?

这是np.vectorize的内部机制导致的:它会先调用一次传入的函数,用来推断输出数组的数据类型(dtype),之后才会遍历输入元素真正执行函数。

具体到你的代码:

  • 当你传入["input"]这个列表时,np.vectorize会先取第一个元素"input"调用一次f,目的是确定返回值的类型,这就产生了第一次hi input的输出;
  • 完成类型推断后,它再对输入的每个元素(这里只有一个)执行f,于是又打印了一次hi input;
  • 最后返回处理后的数组['input'],和你看到的实际输出完全匹配。

解决方法:提前指定输出类型

如果你不想触发这次测试调用,可以给np.vectorize传入otypes参数,提前声明输出的数据类型,这样它就不需要调用函数来推断了:

import numpy as np

def f(x):
    print(f"hi {x}")
    return x

# 明确指定输出为字符串类型
vectorized_f = np.vectorize(f, otypes=[np.str_])
print(vectorized_f(["input"]))

运行这段代码就只会输出一次hi input和['input']。

另外要注意:np.vectorize只是个语法糖,内部还是逐个元素循环处理,并没有真正实现向量化运算,性能和普通Python循环没多大区别,不要指望它能提升计算速度。

内容的提问来源于stack exchange,提问作者zabop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:07:27