diff options
| author | Jon Whiteaker <jbw@berkeley.edu> | 2012-02-24 15:43:55 -0800 |
|---|---|---|
| committer | Jon Whiteaker <jbw@berkeley.edu> | 2012-02-24 15:43:55 -0800 |
| commit | aceb80d84b30ee3b7aaa8521c12f136b3ccac41f (patch) | |
| tree | 74fd6c1ccf0c84eefa336e7e2db29de6b39e4a77 /data | |
| parent | 79583868fb94bbd187cff06bbcc92fbebe70b110 (diff) | |
| download | kinect-aceb80d84b30ee3b7aaa8521c12f136b3ccac41f.tar.gz | |
adding nearest neighbor for skel data
Diffstat (limited to 'data')
| -rwxr-xr-x | data/nn-goldman.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/data/nn-goldman.py b/data/nn-goldman.py new file mode 100755 index 0000000..0a04e7a --- /dev/null +++ b/data/nn-goldman.py @@ -0,0 +1,52 @@ +#!/usr/bin/python +import sys +import random +import numpy as np + + +def quadratic_knn_search(data, lidx, ldata, K): + """ find K nearest neighbours of data among ldata """ + ndata = ldata.shape[1] + param = ldata.shape[0] + K = K if K < ndata else ndata + retval = [] + sqd = ((ldata - data[:,:ndata])**2).sum(axis=0) # data.reshape((param,1)).repeat(ndata, axis=1); + idx = np.argsort(sqd, kind='mergesort') + idx = idx[:K] + return zip(sqd[idx], lidx[idx]) + +def normalize(a,weights=None): + if weights == None: + weights= {} + cols = a.shape[1] + for i in range(cols): + weights[i] = None + + for i in weights.keys(): + column = a[:,i] + if weights[i] == None: + weights[i] = np.mean(column), np.std(column) + a[:,i] = (column-weights[i][0])/weights[i][1] + return a + +def knn_search( data1, data2, K ): + """ find the K nearest neighbours for data points in data, + using O(n**2) search """ + ndata = data1.shape[1] + knn = [] + idx = np.arange(ndata) + for i in np.arange(ndata): + _knn = quadratic_knn_search(data1[:,i], idx, data2, K+1) # see above + knn.append( _knn[1:] ) + return knn + +if __name__ == "__main__": + random.seed() + sk_data = normalize(np.loadtxt(sys.argv[1],comments="#",delimiter=",",usecols=range(1,7,1)).T) + gaussify = np.vectorize(lambda x: x+random.gauss(0,float(sys.argv[2]))) + sk1 = gaussify(sk_data) + sk2 = gaussify(sk_data) + print sk1 + print sk2 + print knn_search(sk1,sk2,1) + |
