python - list index error with numba guvectorize -
i new numba / numbapro. trying run 1 of examples, 1 generalised ufuncs guvectorize:
(here link example): http://docs.continuum.io/numbapro/quickstart.html#numbapro-guvectorize
import numbapro numbapro @numbapro.guvectorize(['void(int32[:], int32[:])'], '(n)->()') def sum_row(inp, out): """ sum every row function type: 2 arrays (note: scalar represented array of length 1) signature: n elements scalar """ tmp = 0. in range(inp.shape[0]): tmp += inp[i] out[0] = tmp
i error:
indexerror traceback (most recent phone 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 fty in ftylist: 118 guvec.add(fty) --> 119 homecoming guvec.build_ufunc() 120 121 homecoming wrap /users/adelacalle/anaconda_linux/lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyc in build_ufunc(self) 149 150 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 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 i, v in enumerate(values): indexerror: list index out of range
i not found more documentation link. doing wrong? found happens when there empty bracket in signature. running on linux machine, , version of numbapro 0.14.1
thanks in advance,
alex
finally arrived conclusion myself. can allocate actual array of n elements, can write signature ´(n)->(n)´ instead of '(n)->()'. there must error on documentation, or outdated.
however, not efficiently have allocate whole array , waste of memory (although works!). more, utilize guvectorize sum elements across array best, neat , efficient way it, utilize @jit.
alex
python anaconda numba numba-pro
No comments:
Post a Comment