def __init__(self, pts, max_depth=None): if not len(pts.shape) == 2 and not pts.shape[1] == 4: raise ValueError('pts must be a numpy ndarray with shape (length,4).') if max_depth == None: max_depth = math.log(len(pts), 2) + 2 self._points = CLReal() parr = np.array(pts).flatten() parr.shape = (parr.shape[0], 1) self._points.value = parr data = list(kd_c.get_tree(pts)) for i in range(len(data)): data[i] = data[i].flatten() data[i].shape = (data[i].shape[0], 1) self._id = CLInt() self._parent = CLInt() self._cdim = CLInt() self._pt = CLInt() self._lo = CLInt() self._hi = CLInt() self._vmax = CLReal() self._vmin = CLReal() self._cval = CLReal() self._offset = CLScalar(0) self._id.value = data[0] self._parent.value = data[1] self._cdim.value = data[2] self._pt.value = data[3] self._lo.value = data[4] self._hi.value = data[5] self._vmin.value = data[6] self._vmax.value = data[7] self._cval.value = data[8] #prepare for nns self._query_points = CLReal4() self._neigh_i = CLInt() self._neigh_d = CLReal() #prepare the kernel pre = "#define MAX_DEPTH " + str(int(max_depth)) self._get_nn_krn = CLTemplateKernel(pre=pre, src=_GET_NN_SRC) self._get_nn_krn.query_points = self._query_points self._get_nn_krn.points = self._points self._get_nn_krn.id = self._id self._get_nn_krn.parent = self._parent self._get_nn_krn.cdim = self._cdim self._get_nn_krn.pt = self._pt self._get_nn_krn.lo = self._lo self._get_nn_krn.hi = self._hi self._get_nn_krn.vmin = self._vmin self._get_nn_krn.vmax = self._vmax self._get_nn_krn.cval = self._cval self._get_nn_krn.neigh_i = self._neigh_i self._get_nn_krn.neigh_d = self._neigh_d self._get_nn_krn.offset = self._offset self._get_nn_krn.compile()
# -*- coding: utf-8 -*- """ Created on Sun Dec 6 17:29:12 2015 @author: Hagen """ import kd_c import numpy as np length = 10000 points = np.random.rand(length,4) #print points tup = kd_c.get_tree(points) c = 0; for i in tup: print len(i), i