Python numba guvectorize的列表索引错误

Python numba guvectorize的列表索引错误,python,anaconda,numba,numba-pro,Python,Anaconda,Numba,Numba Pro,我是numba/numbapro的新手。我试着运行其中一个例子,这是一个关于使用guvectorize的通用UFUNC的例子: (此处为示例链接): 我得到这个错误: IndexError Traceback (most recent call last) <ipython-input-98-79514a184595> in <module>() ----> 1 @numbapro.guvectorize

我是numba/numbapro的新手。我试着运行其中一个例子,这是一个关于使用guvectorize的通用UFUNC的例子:

(此处为示例链接):

我得到这个错误:

IndexError                                Traceback (most recent call last)
<ipython-input-98-79514a184595> in <module>()
----> 1 @numbapro.guvectorize(['void(int32[:], int32[:])'], '(n)->()')
      2 def sum_row(inp, out):
      3     """
      4     Sum every row
      5 

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/decorators.pyc in wrap(func)
    117         for fty in ftylist:
    118             guvec.add(fty)
--> 119         return guvec.build_ufunc()
    120 
    121     return wrap

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build_ufunc(self)
    149 
    150         for sig, cres in self.nb_func.overloads.items():
--> 151             dtypenums, ptr = self.build(cres)
    152             dtypelist.append(dtypenums)
    153             ptrlist.append(utils.longint(ptr))

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build(self, cres)
    167         signature = cres.signature
    168         wrapper = build_gufunc_wrapper(ctx, cres.llvm_func, signature,
--> 169                                        self.sin, self.sout)
    170         ctx.engine.add_module(wrapper.module)
    171         ptr = ctx.engine.get_pointer_to_function(wrapper)

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/wrappers.pyc in build_gufunc_wrapper(context, func, signature, sin, sout)
    143     for i, (typ, sym) in enumerate(zip(signature.args, sin + sout)):
    144         ary = GUArrayArg(context, builder, arg_args, arg_dims, arg_steps, i,
--> 145                          step_offset, typ, sym, sym_dim)
    146         step_offset += ary.ndim
    147         arrays.append(ary)

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/wrappers.pyc in __init__(self, context, builder, args, dims, steps, i, step_offset, typ, syms, sym_dim)
    207         self.array = arycls(context, builder)
    208         self.array.data = builder.bitcast(self.data, self.array.data.type)
--> 209         self.array.shape = cgutils.pack_array(builder, self.shape)
    210         self.array.strides = cgutils.pack_array(builder, self.strides)
    211         self.array_value = self.array._getpointer()

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/cgutils.pyc in pack_array(builder, values)
    257 def pack_array(builder, values):
    258     n = len(values)
--> 259     ty = values[0].type
    260     ary = Constant.undef(Type.array(ty, n))
    261     for i, v in enumerate(values):

IndexError: list index out of range
索引器错误回溯(最近一次调用)
在()
---->1@numbapro.guvectorize(['void(int32[:],int32[:])'],'(n)->()'))
2 def sum_行(输入,输出):
3     """
4每行求和
5.
/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/decorators.pyc包装(func)
117对于fty列表中的fty:
118古韦克增补(fty)
-->119返回guvec.build_ufunc()
120
121返回包装
/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build_ufunc(self)
149
150对于sig,cres在self.nb_func.overloads.items()中:
-->151数据类型,ptr=self.build(cres)
152 dtypelist.append(dtypenums)
153 ptrlist.append(utils.longint(ptr))
/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build(self,cres)
167签名=cres.signature
168 wrapper=build_gufunc_wrapper(ctx,cres.llvm_func,签名,
-->169自我罪恶,自我毁灭)
170 ctx.发动机添加模块(包装器模块)
171 ptr=ctx.engine.get_指针_指向函数(包装器)
/build_gufunc_包装中的users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/wrappers.pyc(上下文、函数、签名、sin、sout)
143表示枚举(zip(signature.args,sin+sout)中的i(典型,符号):
144 ary=GUArrayArg(上下文、生成器、arg_args、arg_dims、arg_步骤、i、,
-->145阶跃偏移,典型,对称,对称尺寸)
146阶跃偏移量+=ary.ndim
147.数组追加(ary)
/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/wrappers.pyc在uuu init_uuu中(self、context、builder、args、dims、steps、i、step_offset、typ、syms、sym_dim)
207 self.array=arycls(上下文,生成器)
208 self.array.data=builder.bitcast(self.data,self.array.data.type)
-->209 self.array.shape=cgutils.pack\u数组(生成器,self.shape)
210 self.array.strips=cgutils.pack_数组(生成器,self.strips)
211 self.array\u value=self.array.\u getpointer()
/pack_数组中的users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/cgutils.pyc(生成器,值)
257 def pack_阵列(生成器、值):
258 n=len(值)
-->259 ty=值[0]。类型
260元=常量.undf(类型.array(ty,n))
261对于枚举中的i,v(值):
索引器:列表索引超出范围
我没有找到比此链接更多的文档。我做错了什么吗?我发现签名中有空括号时会发生这种情况。 我在linux机器上运行这个,我的numbapro版本是0.14.1

提前感谢,


Alex

最后我自己得出了一个结论。您可以分配一个实际的n元素数组,这样您就可以将
(n)->(n)
而不是
(n)->()
作为签名来编写。文档中一定有错误,或者它已经过时

但是,这并不高效,因为我们必须分配整个数组,这将是内存的浪费(尽管它可以工作!)。更重要的是,使用
guvectorize
对整个数组中的元素求和,这可能是最好、简洁、高效的方法,所以我使用@jit

IndexError                                Traceback (most recent call last)
<ipython-input-98-79514a184595> in <module>()
----> 1 @numbapro.guvectorize(['void(int32[:], int32[:])'], '(n)->()')
      2 def sum_row(inp, out):
      3     """
      4     Sum every row
      5 

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/decorators.pyc in wrap(func)
    117         for fty in ftylist:
    118             guvec.add(fty)
--> 119         return guvec.build_ufunc()
    120 
    121     return wrap

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build_ufunc(self)
    149 
    150         for sig, cres in self.nb_func.overloads.items():
--> 151             dtypenums, ptr = self.build(cres)
    152             dtypelist.append(dtypenums)
    153             ptrlist.append(utils.longint(ptr))

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build(self, cres)
    167         signature = cres.signature
    168         wrapper = build_gufunc_wrapper(ctx, cres.llvm_func, signature,
--> 169                                        self.sin, self.sout)
    170         ctx.engine.add_module(wrapper.module)
    171         ptr = ctx.engine.get_pointer_to_function(wrapper)

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/wrappers.pyc in build_gufunc_wrapper(context, func, signature, sin, sout)
    143     for i, (typ, sym) in enumerate(zip(signature.args, sin + sout)):
    144         ary = GUArrayArg(context, builder, arg_args, arg_dims, arg_steps, i,
--> 145                          step_offset, typ, sym, sym_dim)
    146         step_offset += ary.ndim
    147         arrays.append(ary)

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/wrappers.pyc in __init__(self, context, builder, args, dims, steps, i, step_offset, typ, syms, sym_dim)
    207         self.array = arycls(context, builder)
    208         self.array.data = builder.bitcast(self.data, self.array.data.type)
--> 209         self.array.shape = cgutils.pack_array(builder, self.shape)
    210         self.array.strides = cgutils.pack_array(builder, self.strides)
    211         self.array_value = self.array._getpointer()

/users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/cgutils.pyc in pack_array(builder, values)
    257 def pack_array(builder, values):
    258     n = len(values)
--> 259     ty = values[0].type
    260     ary = Constant.undef(Type.array(ty, n))
    261     for i, v in enumerate(values):

IndexError: list index out of range