0

我通过了numpy.vectorize文档。我不明白文档中句子的含义:

排除参数可用于防止对某些参数进行矢量化。这对于固定长度的类似数组的参数很有用,例如polyval中多项式的系数。

我在那里找到了以下示例(我添加print()了用于探索我的疑问的声明,如下所述):

def mypolyval(p, x):
    print('Called mypolyval: ',(p,x))
    _p = list(p)
    res = _p.pop(0)
    while _p:
        res = res*x + _p.pop(0)
    return res

vpolyval = np.vectorize(mypolyval, excluded=['p'])

res2 = vpolyval(p=[1, 2, 3], x=[0, 1])

print(res2)

没有的输出print()[3,6]。所以,我觉得通过调用它两次numpy.vectorize来进行评估mypolyval,一次是每个元素,每次都x传递完整的p数组。这就是为什么输出包含两个元素36. 但是当我调试时,它运行了三次,两次x=0使用x=1. 为了确认我的调试观察,我添加了print()声明。这是输出,证实了我的调试观察:

Called mypolyval:  ([1, 2, 3], 0)
Called mypolyval:  ([1, 2, 3], 0)
Called mypolyval:  ([1, 2, 3], 1)
[3 6]

那么,我认为它应该只为x=0or执行两次是不正确的x=1吗?

4

0 回答 0