Perf/vectorize previous high low: ~80-100x speedup #96
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.
Vectorizes
previous_high_low()method by replacing the per-candle loopProblem
The current implementation loops through every candle and calls
np.where()to find resampled periodsThis creates O(n × m) complexity where n = candles, m = resampled periods.
Solution
Use np.searchsorted for O(log m) binary search
Eliminate loop completely
Use groupby().cummax & cummin for vectorized broken flag calc
Benchmarks
Before vectorization:
..previous_high_low test time: 1.3034696578979492
previous_high_low test time: 1.2444789409637451
previous_high_low test time: 1.194727897644043
After vectorization:
..previous_high_low test time: 0.010783195495605469
previous_high_low test time: 0.01098489761352539
previous_high_low test time: 0.00976705551147461