def test_empty_y(): with pytest.raises(RuntimeError): cuspatial.directed_hausdorff_distance( [0.0], [], [0], )
def test_values(): in_trajs = [] in_trajs.append(np.array([[1, 0], [2, 1], [3, 2], [5, 3], [7, 1]])) in_trajs.append(np.array([[0, 3], [2, 5], [3, 6], [6, 5]])) in_trajs.append(np.array([[1, 4], [3, 7], [6, 4]])) out_trajs = np.concatenate([np.asarray(traj) for traj in in_trajs], 0) py_x = np.array(out_trajs[:, 0]) py_y = np.array(out_trajs[:, 1]) py_cnt = [] for traj in in_trajs: py_cnt.append(len(traj)) pnt_x = cudf.Series(py_x) pnt_y = cudf.Series(py_y) cnt = cudf.Series(py_cnt) distance = cuspatial.directed_hausdorff_distance(pnt_x, pnt_y, cnt) assert_eq( distance, cudf.DataFrame( { 0: [0, 3.605551, 4.472136], 1: [4.123106, 0.0, 1.414214], 2: [4.0, 1.414214, 0.0], } ), )
def _test_hausdorff_from_list_of_spaces(spaces): lengths = [len(space) for space in spaces] offsets = np.cumsum([0, *lengths])[:-1] return cuspatial.directed_hausdorff_distance( [x for space in spaces for (x, y) in space], [y for space in spaces for (x, y) in space], offsets, )
def test_count_two(): distance = cuspatial.directed_hausdorff_distance( cudf.Series([0.0, 0.0, 1.0, 0.0]), cudf.Series([0.0, -1.0, 1.0, -1.0]), cudf.Series([2, 2]), ) assert_eq( distance, cudf.DataFrame({0: [0, 1.4142135623730951], 1: [1, 0.0]}) )
def test_large(): in_trajs = [] in_trajs.append(np.array([[0, 0], [1, 0]])) in_trajs.append(np.array([[0, -1], [1, -1]])) out_trajs = np.concatenate([np.asarray(traj) for traj in in_trajs], 0) py_x = np.array(out_trajs[:, 0]) py_y = np.array(out_trajs[:, 1]) py_cnt = [] for traj in in_trajs: py_cnt.append(len(traj)) pnt_x = cudf.Series(py_x) pnt_y = cudf.Series(py_y) cnt = cudf.Series(py_cnt) distance = cuspatial.directed_hausdorff_distance(pnt_x, pnt_y, cnt) assert_eq(distance, cudf.DataFrame({0: [0, 1.0], 1: [1.0, 0]}))
def test_count_one(): distance = cuspatial.directed_hausdorff_distance( cudf.Series([0.0, 0.0]), cudf.Series([0.0, 1.0]), cudf.Series([1, 1]) ) assert_eq(distance, cudf.DataFrame({0: [0, 1.0], 1: [1.0, 0]}))
def test_no_spaces(): result = cuspatial.directed_hausdorff_distance( cudf.Series([0]), cudf.Series([0]), cudf.Series() ) assert_eq(cudf.DataFrame([]), result)
def test_empty_y(): with pytest.raises(RuntimeError): cuspatial.directed_hausdorff_distance( cudf.Series([0]), cudf.Series(), cudf.Series([0]) )
def test_zeros(): distance = cuspatial.directed_hausdorff_distance( cudf.Series([0.0]), cudf.Series([0.0]), cudf.Series([1]) ) assert_eq(distance, cudf.DataFrame([0.0]))
import cuspatial in_trajs = [] in_trajs.append(np.array([[1, 0], [2, 1], [3, 2], [5, 3], [7, 1]])) in_trajs.append(np.array([[0, 3], [2, 5], [3, 6], [6, 5]])) in_trajs.append(np.array([[1, 4], [3, 7], [6, 4]])) out_trajs = np.concatenate([np.asarray(traj) for traj in in_trajs], 0) py_x = np.array(out_trajs[:, 0]) py_y = np.array(out_trajs[:, 1]) py_cnt = [] for traj in in_trajs: py_cnt.append(len(traj)) pnt_x = Series(py_x) pnt_y = Series(py_y) cnt = Series(py_cnt) distance = cuspatial.directed_hausdorff_distance(pnt_x, pnt_y, cnt) matrix = distance.as_matrix() # clustering using AgglomerativeClustering agg1 = AgglomerativeClustering(n_clusters=2, affinity="precomputed", linkage="average") label1 = agg1.fit(matrix) print("AgglomerativeClustering results={}".format(label1.labels_)) # clustering using DBSCAN; as the minimum distanance is ~1.4, # using eps=1.5 will generate the same two clasters as AgglomerativeClustering agg2 = DBSCAN(eps=1.5, min_samples=1, metric="precomputed") label2 = agg2.fit(matrix) print("DBSCAN clustering results={}".format(label2.labels_))
def test_empty_counts(): with pytest.raises(RuntimeError): distance = cuspatial.directed_hausdorff_distance( # noqa: F841 cudf.Series([0]), cudf.Series([0]), cudf.Series())