Python numba guvectorize的列表索引错误
我是numba/numbapro的新手。我试着运行其中一个例子,这是一个关于使用guvectorize的通用UFUNC的例子: (此处为示例链接): 我得到这个错误: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
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