в основном вы хотите отфильтровать ваши данные pm
, что легко сделать с вашим массивом idx. Вы можете кластеризовать отфильтрованные данные, чтобы получить две группы.
Алгоритмы кластеризации на основе разделов, такие как k-Means или SingleLink , могут быть идеально применены. В scikit-learn
вы могли бы использовать /sklearn.cluster.AgglomerativeClustering
.
Поскольку эти алгоритмы кластеризации предполагают, что ваши данные будут иметь элементы в столбцах, а экземпляры в виде строк - вам необходимо изменить свои данные.
Из полученных меток кластера вы можете затем создать отдельные индексные массивы, используя понимание списка. (не нашел numpy функцию, которая делает то же самое)
Ваше решение может выглядеть следующим образом:
cluster_algorithm = AgglomerativeClustering(n_clusters=2)
labels = cluster_algorithm.fit_predict(np.expand_dims(pm[idx], axis=-1))
print(labels)
>>> [1 1 1 0 0]
idx_labels = [np.where(labels == e)[0] for e in set(labels)]
idx_labels # [array([3, 4], dtype=int64), array([0, 1, 2], dtype=int64)]