Skip to content

Commit 22bb0bd

Browse files
Micky774punndcoder28
authored andcommitted
PERF Pass buffers via pointers in PairwiseDistancesReductions routines for sparse data (scikit-learn#26765)
1 parent 597fa08 commit 22bb0bd

File tree

5 files changed

+120
-113
lines changed

5 files changed

+120
-113
lines changed

doc/whats_new/v1.4.rst

+7
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,13 @@ Changelog
136136
:pr:`13649` by :user:`Samuel Ronsin <samronsin>`, initiated by
137137
:user:`Patrick O'Reilly <pat-oreilly>`.
138138

139+
:mod:`sklearn.metrics`
140+
......................
141+
142+
- |Performance| Computing pairwise distances via :class:`metrics.DistanceMetric`
143+
for CSR × CSR, Dense × CSR, and CSR × Dense datasets is now 1.5x faster.
144+
:pr:`26765` by :user:`Meekail Zain <micky774>`
145+
139146
:mod:`sklearn.utils`
140147
....................
141148

sklearn/metrics/_dist_metrics.pxd.tp

+10-10
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ cdef class DistanceMetric{{name_suffix}}(DistanceMetric):
8888
cdef float64_t dist_csr(
8989
self,
9090
const {{INPUT_DTYPE_t}}* x1_data,
91-
const int32_t[:] x1_indices,
91+
const int32_t* x1_indices,
9292
const {{INPUT_DTYPE_t}}* x2_data,
93-
const int32_t[:] x2_indices,
93+
const int32_t* x2_indices,
9494
const int32_t x1_start,
9595
const int32_t x1_end,
9696
const int32_t x2_start,
@@ -101,9 +101,9 @@ cdef class DistanceMetric{{name_suffix}}(DistanceMetric):
101101
cdef float64_t rdist_csr(
102102
self,
103103
const {{INPUT_DTYPE_t}}* x1_data,
104-
const int32_t[:] x1_indices,
104+
const int32_t* x1_indices,
105105
const {{INPUT_DTYPE_t}}* x2_data,
106-
const int32_t[:] x2_indices,
106+
const int32_t* x2_indices,
107107
const int32_t x1_start,
108108
const int32_t x1_end,
109109
const int32_t x2_start,
@@ -127,20 +127,20 @@ cdef class DistanceMetric{{name_suffix}}(DistanceMetric):
127127
cdef int pdist_csr(
128128
self,
129129
const {{INPUT_DTYPE_t}}* x1_data,
130-
const int32_t[:] x1_indices,
131-
const int32_t[:] x1_indptr,
130+
const int32_t[::1] x1_indices,
131+
const int32_t[::1] x1_indptr,
132132
const intp_t size,
133133
float64_t[:, ::1] D,
134134
) except -1 nogil
135135

136136
cdef int cdist_csr(
137137
self,
138138
const {{INPUT_DTYPE_t}}* x1_data,
139-
const int32_t[:] x1_indices,
140-
const int32_t[:] x1_indptr,
139+
const int32_t[::1] x1_indices,
140+
const int32_t[::1] x1_indptr,
141141
const {{INPUT_DTYPE_t}}* x2_data,
142-
const int32_t[:] x2_indices,
143-
const int32_t[:] x2_indptr,
142+
const int32_t[::1] x2_indices,
143+
const int32_t[::1] x2_indptr,
144144
const intp_t size,
145145
float64_t[:, ::1] D,
146146
) except -1 nogil

0 commit comments

Comments
 (0)