Skip to content

Commit ff3cd66

Browse files
committed
replace np.sum with math.fsum to fix loss of precision
1 parent 10f4651 commit ff3cd66

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

tests/naive.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ def get_array_ranges(a, n_chunks, truncate):
854854
sum = 0
855855
for i in range(a.shape[0]):
856856
sum += a[i]
857-
if sum > a.sum() / n_chunks:
857+
if sum > math.fsum(a) / n_chunks:
858858
out[ranges_idx, 0] = range_start_idx
859859
out[ranges_idx, 1] = min(i + 1, a.shape[0]) # Exclusive stop index
860860
# Reset and Update
@@ -1614,15 +1614,15 @@ def mpdist_snippets(
16141614
for snippet_idx in range(k):
16151615
min_area = np.inf
16161616
for i in range(D.shape[0]):
1617-
profile_area = np.sum(np.minimum(D[i], Q))
1617+
profile_area = math.fsum(np.minimum(D[i], Q))
16181618
if min_area > profile_area:
16191619
min_area = profile_area
16201620
idx = i
16211621

16221622
snippets[snippet_idx] = T[indices[idx] : indices[idx] + m]
16231623
snippets_indices[snippet_idx] = indices[idx]
16241624
snippets_profiles[snippet_idx] = D[idx]
1625-
snippets_areas[snippet_idx] = np.sum(np.minimum(D[idx], Q))
1625+
snippets_areas[snippet_idx] = math.fsum(np.minimum(D[idx], Q))
16261626

16271627
Q = np.minimum(D[idx], Q)
16281628

@@ -1737,15 +1737,15 @@ def aampdist_snippets(
17371737
for snippet_idx in range(k):
17381738
min_area = np.inf
17391739
for i in range(D.shape[0]):
1740-
profile_area = np.sum(np.minimum(D[i], Q))
1740+
profile_area = math.fsum(np.minimum(D[i], Q))
17411741
if min_area > profile_area:
17421742
min_area = profile_area
17431743
idx = i
17441744

17451745
snippets[snippet_idx] = T[indices[idx] : indices[idx] + m]
17461746
snippets_indices[snippet_idx] = indices[idx]
17471747
snippets_profiles[snippet_idx] = D[idx]
1748-
snippets_areas[snippet_idx] = np.sum(np.minimum(D[idx], Q))
1748+
snippets_areas[snippet_idx] = math.fsum(np.minimum(D[idx], Q))
17491749

17501750
Q = np.minimum(D[idx], Q)
17511751

tests/test_non_normalized_decorator.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import math
2+
13
import naive
24
import numpy as np
35
import numpy.testing as npt
@@ -44,7 +46,9 @@ def test_mass():
4446
Q = np.random.rand(10)
4547
T = np.random.rand(20)
4648
T, T_subseq_isfinite = stumpy.core.preprocess_non_normalized(T, 10)
47-
T_squared = np.sum(stumpy.core.rolling_window(T * T, Q.shape[0]), axis=-1)
49+
50+
arr = stumpy.core.rolling_window(T * T, Q.shape[0])
51+
T_squared = np.array([math.fsum(arr[i]) for i in range(arr.shape[0])])
4852
ref = stumpy.core.mass_absolute(Q, T)
4953
comp = stumpy.core.mass(Q, T, M_T=T_subseq_isfinite, normalize=False)
5054
npt.assert_almost_equal(ref, comp)

0 commit comments

Comments
 (0)