Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Replaced bottleneck with logically equivalent code. There's a section in the code which appears to be useless, and is causing significant performance issues with large time series.
In line 169: k_pos is independent of k_neg: therefore we may just replace it with its final value.
Lines 170/171 overwrite k_neg every pass. Therefore, the final value of k_neg only depends on the final value of k_pos.
I was taking a significant performance hit for time series of length > 100,000. It's obvious now from the code why: the for loop (line 168) is linear in the time series length, and unnecessarily allocates/deallocates memory repeatedly, with O(n^2) memory used, since the length of k_neg is the same as the iterator i. The exact value is something like (n / 2) (n /2 + 1) / 2 excess memory operations.