pandas-ta icon indicating copy to clipboard operation
pandas-ta copied to clipboard

Performance improvements for WMA, FWMA and Linreg

Open Rossco8 opened this issue 11 months ago • 0 comments

Code performance tested with cProfile

WMA original performance

120451 function calls (120437 primitive calls) in 0.073 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     5001    0.015    0.000    0.046    0.000 base.py:5437(_can_hold_identifiers_and_holds_name)
     5003    0.009    0.000    0.056    0.000 generic.py:6281(__getattr__)
     1250    0.008    0.000    0.070    0.000 wma.py:65(_compute)
     5001    0.007    0.000    0.013    0.000 common.py:137(is_object_dtype)
     5001    0.006    0.000    0.012    0.000 common.py:1375(_is_dtype)
     5001    0.004    0.000    0.017    0.000 common.py:536(is_string_dtype)
     5001    0.004    0.000    0.005    0.000 common.py:572(condition)
     5001    0.004    0.000    0.005    0.000 common.py:1434(_is_dtype_type)
     2500    0.004    0.000    0.006    0.000 series.py:974(__array__)
        1    0.002    0.002    0.071    0.071 rolling.py:1531(apply_func)

WMA New Performance

309 function calls (300 primitive calls) in 0.002 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001    0.001    0.001 base.py:2313(is_unique)
        1    0.000    0.000    0.000    0.000 base.py:842(_engine)
        1    0.000    0.000    0.000    0.000 base.py:5323(__contains__)
        1    0.000    0.000    0.000    0.000 wma.py:16(wma)
        1    0.000    0.000    0.001    0.001 frame.py:4050(__getitem__)
      4/2    0.000    0.000    0.000    0.000 {built-in method _abc._abc_subclasscheck}
        1    0.000    0.000    0.000    0.000 frame.py:3971(_ixs)
        1    0.000    0.000    0.002    0.002 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 frame.py:4614(_get_item_cache)
        1    0.000    0.000    0.000    0.000 managers.py:1012(iget)

FWMA original performance

2936 function calls (2925 primitive calls) in 0.005 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.002    0.002    0.003    0.003 rolling.py:1531(apply_func)
     1250    0.001    0.000    0.001    0.000 _math.py:249(_dot)
        1    0.000    0.000    0.001    0.001 base.py:2313(is_unique)
        1    0.000    0.000    0.000    0.000 base.py:5323(__contains__)
        2    0.000    0.000    0.000    0.000 {method 'reduce' of 'numpy.ufunc' objects}
        1    0.000    0.000    0.000    0.000 base.py:842(_engine)
     1250    0.000    0.000    0.000    0.000 multiarray.py:741(dot)
        1    0.000    0.000    0.004    0.004 fwma.py:15(fwma)
        1    0.000    0.000    0.000    0.000 _math.py:81(fibonacci)
        1    0.000    0.000    0.001    0.001 frame.py:4050(__getitem__)

FWMA new performance

398 function calls (389 primitive calls) in 0.002 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001    0.001    0.001 base.py:2313(is_unique)
        1    0.000    0.000    0.000    0.000 base.py:842(_engine)
        1    0.000    0.000    0.000    0.000 base.py:5323(__contains__)
        1    0.000    0.000    0.000    0.000 fwma.py:15(fwma)
        1    0.000    0.000    0.000    0.000 frame.py:4614(_get_item_cache)
        1    0.000    0.000    0.000    0.000 _math.py:81(fibonacci)
        9    0.000    0.000    0.000    0.000 function_base.py:5563(append)
        1    0.000    0.000    0.001    0.001 frame.py:4050(__getitem__)
        1    0.000    0.000    0.000    0.000 frame.py:3971(_ixs)
        1    0.000    0.000    0.002    0.002 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 managers.py:1012(iget)

Linreg original performance

9017 function calls (9012 primitive calls) in 0.027 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.009    0.009    0.025    0.025 linreg.py:127(<listcomp>)
     1246    0.007    0.000    0.016    0.000 linreg.py:98(linear_regression)
     2492    0.005    0.000    0.008    0.000 {method 'sum' of 'numpy.ndarray' objects}
     2493    0.003    0.000    0.003    0.000 {method 'reduce' of 'numpy.ufunc' objects}
     2492    0.001    0.000    0.004    0.000 _methods.py:47(_sum)
        1    0.000    0.000    0.026    0.026 linreg.py:20(linreg)
        1    0.000    0.000    0.001    0.001 frame.py:4050(__getitem__)
        1    0.000    0.000    0.000    0.000 stride_tricks.py:123(sliding_window_view)
        1    0.000    0.000    0.027    0.027 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 cast.py:124(maybe_convert_platform)
        1    0.000    0.000    0.027    0.027 <string>:1(<module>)

Linreg new performance

272 function calls (267 primitive calls) in 0.003 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001    0.002    0.002 linreg.py:14(linreg)
        1    0.000    0.000    0.000    0.000 stride_tricks.py:123(sliding_window_view)
        1    0.000    0.000    0.003    0.003 <string>:1(<module>)
        1    0.000    0.000    0.003    0.003 {built-in method builtins.exec}
        3    0.000    0.000    0.000    0.000 {method 'reduce' of 'numpy.ufunc' objects}
        1    0.000    0.000    0.001    0.001 frame.py:4050(__getitem__)
        1    0.000    0.000    0.000    0.000 managers.py:1012(iget)
        1    0.000    0.000    0.000    0.000 frame.py:3971(_ixs)
        1    0.000    0.000    0.000    0.000 stride_tricks.py:38(as_strided)
        1    0.000    0.000    0.001    0.001 frame.py:4614(_get_item_cache)
        1    0.000    0.000    0.000    0.000 series.py:389(__init__)

Rossco8 avatar Mar 11 '24 00:03 Rossco8