8000 FIX Updated loop structure in hdbscan `_tree.pyx` to avoid error (#26… · scikit-learn/scikit-learn@ab48408 · GitHub
[go: up one dir, main page]

Skip to content

Commit ab48408

Browse files
authored
FIX Updated loop structure in hdbscan _tree.pyx to avoid error (#26547)
1 parent 168b4e7 commit ab48408

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

sklearn/cluster/_hdbscan/_tree.pyx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ import cython
3636

3737
import numpy as np
3838

39+
cdef extern from "numpy/arrayobject.h":
40+
intp_t * PyArray_SHAPE(cnp.PyArrayObject *)
41+
3942
cdef cnp.float64_t INFTY = np.inf
4043
cdef cnp.intp_t NOISE = -1
4144

@@ -240,7 +243,7 @@ cdef dict _compute_stability(
240243
cnp.float64_t[::1] result, births
241244
cnp.intp_t[:] parents = condensed_tree['parent']
242245

243-
cnp.intp_t parent, cluster_size, result_index
246+
cnp.intp_t parent, cluster_size, result_index, idx
244247
cnp.float64_t lambda_val
245248
CONDENSED_t condensed_node
246249
cnp.float64_t[:, :] result_pre_dict
@@ -251,14 +254,15 @@ cdef dict _compute_stability(
251254
largest_child = max(largest_child, smallest_cluster)
252255
births = np.full(largest_child + 1, np.nan, dtype=np.float64)
253256

254-
births = np.full(largest_child + 1, np.nan, dtype=np.float64)
255-
for condensed_node in condensed_tree:
257+
for idx in range(PyArray_SHAPE(<cnp.PyArrayObject*> condensed_tree)[0]):
258+
condensed_node = condensed_tree[idx]
256259
births[condensed_node.child] = condensed_node.value
257260

258261
births[smallest_cluster] = 0.0
259262

260263
result = np.zeros(num_clusters, dtype=np.float64)
261-
for condensed_node in condensed_tree:
264+
for idx in range(PyArray_SHAPE(<cnp.PyArrayObject*> condensed_tree)[0]):
265+
condensed_node = condensed_tree[idx]
262266
parent = condensed_node.parent
263267
lambda_val = condensed_node.value
264268
cluster_size = condensed_node.cluster_size

0 commit comments

Comments
 (0)
0