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

为何np.vectorize封装的函数执行次数多于传入元素数量?——以单元素列表调用场景为例

Why does np.vectorize call my function twice with a length-1 input?

这其实是np.vectorize一个容易踩的小坑——它会自动检测函数返回值的数据类型(dtype),而检测的方式就是先用输入的第一个元素调用一次你的函数。

具体到你的场景:
当你调用np.vectorize(f)(["input"])时,因为没有手动指定otypes参数,np.vectorize会先拿输入列表里的"input"调用一次f,目的是根据返回值推断最终要生成的numpy数组的dtype;完成类型推断后,它才会真正遍历输入的所有元素(这里只有一个"input"),再调用一次f。所以你会看到两次hi input的输出。

要解决这个问题,只需要在创建vectorized函数时手动指定otypes参数,告诉np.vectorize返回值的类型,这样它就不会额外调用一次函数来检测类型了:

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并不是真正的向量化实现(底层还是逐元素循环),它更多是为了让原本处理单个元素的函数能适配数组输入的语法糖。如果追求性能,建议直接用numpy的原生向量化操作,而不是依赖np.vectorize。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 11:22:28