Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python np.vectorize给我索引器错误:标量变量的索引无效_Python_Numpy - Fatal编程技术网

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
调用函数一次(额外)来确定输出类型。您可以通过指定
类型来避免这种情况。谢谢!我应该更详细地阅读这份文件,记住类似的事情。