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

时间:2015-12-03 11:53:37

标签: python numpy

尝试简单的事情并且令人沮丧地无法工作:

games result = { round, spectators, goals_home_team, goals_visiting_team, "", "", 
        otim.tim_hour, otim.tim_min, day.odate_day, day.odate_year, day.odate_month };

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

3 个答案:

答案 0 :(得分:4)

当您使用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]

答案 1 :(得分:1)

这就是答案:

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

答案 2 :(得分: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

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