Python np.vectorize给我索引器错误:标量变量的索引无效
尝试一些简单的东西,但令人沮丧的是它不起作用:Python np.vectorize给我索引器错误:标量变量的索引无效,python,numpy,Python,Numpy,尝试一些简单的东西,但令人沮丧的是它不起作用: 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]。我可以指定哪些参数应该矢量化,哪些参数应该保持不变吗?只需添加打印即可查看发生的情况: def myfunc(a, b):
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]。我可以指定哪些参数应该矢量化,哪些参数应该保持不变吗?只需添加打印即可查看发生的情况:
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
该函数应用于数组的所有元素。因此它只接收标量值。你不能为标量编制索引。答案如下:
v、 排除。添加(1)有效,但由于某些原因,传递排除=['b']无效。使用
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]
我已经知道b被视为0,而不是前面提到的[0]。解决方案是添加v.excluded.add(1),但我想还是感谢您的参与。谢谢!我已经发现了这一点,但我将你的答案标记为正确的,以供将来有此问题的人参考。我碰到了另一件奇怪的事情:当我尝试像v(a,b)这样的函数时,出于某种原因,它两次接受了a的第一个元素。比如1+1+2+3或0+0+1+2,而不是1+2+3或0+1+2。知道发生了什么吗?
np.vectorize
调用函数一次(额外)来确定输出类型。您可以通过指定类型来避免这种情况。谢谢!我应该更详细地阅读这份文件,记住类似的事情。