def test_empty_y():
    with pytest.raises(RuntimeError):
        cuspatial.directed_hausdorff_distance(
            [0.0],
            [],
            [0],
        )
Пример #2
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,
    )
Пример #4
0
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]})
    )
Пример #5
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]}))
Пример #6
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]}))
Пример #7
0
def test_no_spaces():
    result = cuspatial.directed_hausdorff_distance(
        cudf.Series([0]), cudf.Series([0]), cudf.Series()
    )
    assert_eq(cudf.DataFrame([]), result)
Пример #8
0
def test_empty_y():
    with pytest.raises(RuntimeError):
        cuspatial.directed_hausdorff_distance(
            cudf.Series([0]), cudf.Series(), cudf.Series([0])
        )
Пример #9
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_))
Пример #11
0
def test_empty_counts():
    with pytest.raises(RuntimeError):
        distance = cuspatial.directed_hausdorff_distance(  # noqa: F841
            cudf.Series([0]), cudf.Series([0]), cudf.Series())