mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 03:03:57 +08:00
* use the openpilot/persist directory on PC
* manager runs on mac
* sim runs w/o carla
* fix params location in test
* that rmtree can fail and it's okay
* refactor params clear functionality
* set PARAMS_PATH
old-commit-hash: c42e2ecc50
29 lines
892 B
Python
29 lines
892 B
Python
import os
|
|
import numpy as np
|
|
|
|
from cffi import FFI
|
|
from common.ffi_wrapper import suffix
|
|
|
|
cluster_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)))
|
|
cluster_fn = os.path.join(cluster_dir, "libfastcluster"+suffix())
|
|
|
|
ffi = FFI()
|
|
ffi.cdef("""
|
|
int hclust_fast(int n, double* distmat, int method, int* merge, double* height);
|
|
void cutree_cdist(int n, const int* merge, double* height, double cdist, int* labels);
|
|
void hclust_pdist(int n, int m, double* pts, double* out);
|
|
void cluster_points_centroid(int n, int m, double* pts, double dist, int* idx);
|
|
""")
|
|
|
|
hclust = ffi.dlopen(cluster_fn)
|
|
|
|
|
|
def cluster_points_centroid(pts, dist):
|
|
pts = np.ascontiguousarray(pts, dtype=np.float64)
|
|
pts_ptr = ffi.cast("double *", pts.ctypes.data)
|
|
n, m = pts.shape
|
|
|
|
labels_ptr = ffi.new("int[]", n)
|
|
hclust.cluster_points_centroid(n, m, pts_ptr, dist**2, labels_ptr)
|
|
return list(labels_ptr)
|