Определите кластеры, связанные дельтой слева и другой дельтой справа
Рассмотрим отсортированный массив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]