请教Numpy vectorize中signature参数的工作机制及用法
Numpy vectorize中signature参数的工作原理详解
核心作用
signature是给np.vectorize指定输入输出的形状模板,让它不再默认逐标量处理,而是按照你定义的维度规则批量调用目标函数,适配非标量的输入输出场景。
你的示例拆解
对于signature="(),(),(),()->(2)":
- 前四个
():每个括号对应函数a_function(a,b,c,d)的一个参数,表示这四个参数都是标量(0维数组)。批量调用时,vectorize会从输入数组里逐个取出标量传入原函数。 ->:用来分隔输入参数的形状模板和输出的形状模板。(2):表示原函数的输出是一个长度为2的一维数组(1维,尺寸为2)。vectorize会把所有调用的结果拼接成符合这个形状的批量输出数组。
通用规则
- 括号内的数字代表对应维度的尺寸:比如
(m,n)表示一个m行n列的二维数组,()表示标量(0维)。 - 支持用字母表示任意匹配的尺寸:比如
(n)->(n,2),表示输入是长度为n的一维数组,输出是n行2列的二维数组,n会自动匹配输入的实际长度。 - 多输入参数的形状可以不同:比如
(3,), (2)->(3,2),表示第一个参数是长度3的一维数组,第二个是长度2的一维数组,输出是3行2列的二维数组。
注意事项
np.vectorize本质还是Python循环包装,不是真正的底层向量化运算,性能提升有限,适合快速适配已有函数,而非追求高性能场景。- 原函数必须能处理
signature指定的输入形状:比如如果signature定义输入为(3),原函数要能接受长度为3的数组作为参数,否则会报错。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

