Рассмотрим отсортированный массив a
:
a = np.array([0, 2, 3, 4, 5, 10, 11, 11, 14, 19, 20, 20])
Если я задал левую и правую дельты,
delta_left, delta_right = 1, 1
Тогда я ожидаю, что кластеры будут назначены:
# a = [ 0 . 2 3 4 5 . . . . 10 11 . . 14 . . . . 19 20
# 11 20
#
# [10--|-12] [19--|-21]
# [1--|--3] [10--|-12] [19--|-21]
# [-1--|--1] [3--|--5] [9--|-11] [18--|-20]
# +--+--|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
# [2--|--4] [13--|-15]
#
# │ ╰──┬───╯ ╰┬─╯ │ ╰┬─╯
# │ cluster 2 Cluster 3 │ Cluster 5
# Cluster 1 Cluster 4
ПРИМЕЧАНИЕ: Несмотря на то, что интервал [-1, 1]
разделяет ребро с помощью [1, 3]
, ни один из интервалов не содержит смежную точку и поэтому не соединяет их соответствующие кластеры.
Предполагая, что назначения кластера были сохранены в массиве с именем clusters
, я ожидаю, что результаты будут выглядеть так:
print(clusters)
[1 2 2 2 2 3 3 3 4 5 5 5]
Однако предположим, что я изменяю левую и правую дельтами на разные:
delta_left, delta_right = 2, 1
Это означает, что для значения x
он должен быть объединен с любой другой точкой в интервале [x - 2, x + 1]
# a = [ 0 . 2 3 4 5 . . . . 10 11 . . 14 . . . . 19 20
# 11 20
#
# [9-----|-12] [18-----|-21]
# [0-----|--3] [9-----|-12] [18-----|-21]
# [-2-----|--1][2-----|--5] [8-----|-11] [17-----|-20]
# +--+--|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
# [1 ----|--4] [12-----|-15]
#
# ╰─────┬─────╯ ╰┬─╯ │ ╰┬─╯
# cluster 1 Cluster 2 │ Cluster 4
# Cluster 3
ПРИМЕЧАНИЕ.. Несмотря на то, что интервал [9, 12]
разделяет ребро с помощью [12, 15]
, ни один из интервалов не содержит смежную точку и поэтому не объединяет их соответствующие кластеры.
Предполагая, что назначения кластера были сохранены в массиве с именем clusters
, я ожидаю, что результаты будут выглядеть следующим образом:
print(clusters)
[1 1 1 1 1 2 2 2 3 4 4 4]