np.vectorize给我IndexError:标量变量的索引无效



尝试一些简单的东西,但令人沮丧的是它不起作用:

def myfunc(a,b):
  return a+b[0]
v = np.vectorize(myfunc, exclude=['b'])
a = np.array([1,2,3])
b = [0]
v(a,b)

这给了我"IndexError:标量变量的无效索引。"打印b时,函数接收的b似乎总是0,而不是[0]。我可以指定哪些参数应该向量化,哪些应该保持不变吗?

使用excluded=['b']时,会排除关键字参数b。因此,必须使用关键字参数调用v,例如v(a=a, b=b)而不是v(a, b)

如果您希望使用排除了第二个位置参数的位置参数调用v,则使用

v = np.vectorize(myfunc)
v.excluded.add(1)

例如,

import numpy as np
def myfunc(a, b):
    return a+b[0]
a = np.array([1,2,3])
b = [0, 1]
v = np.vectorize(myfunc, excluded=['b'])
print(v(a=a, b=b))
# [1 2 3]
v = np.vectorize(myfunc)
v.excluded.add(1)
print(v(a, b))
# [1 2 3]

答案如下:

v.excluded.add(1)有效,但由于某种原因,传递exclude=['b']无效。

只需添加打印即可查看发生了什么:

def myfunc(a, b):
    print(a, b)
    return a + b
v = np.vectorize(myfunc)
a = np.array([1,2,3])
b = np.array([0])
v(a, b)

输出:

1 0
1 0
2 0
3 0

该函数应用于数组的所有元素。所以它只接收标量值。不能对标量进行索引。

最新更新