У меня есть приложение, которое использует pandas
и cvxpy
для решения проблемы оптимизации.У меня есть настройка Cython через pyximport.install(setup_args={'include_dirs': np.get_include()})
и в моих модулях:
cimport numpy as np
import numpy as np
Когда я запускаю программу, я вижу, что gcc компилирует код.Однако, когда я оптимизирую с помощью %prun
, это будет результат:
ncalls tottime percall cumtime percall filename:lineno(function)
13 95.403 7.339 95.627 7.356 decomp.py:270(eigh)
39 7.826 0.201 8.968 0.230 numeric.py:2319(within_tol)
13 5.756 0.443 5.756 0.443 {built-in method _ecos.csolve}
13 4.805 0.370 5.118 0.394 decomp.py:118(eig)
729 4.714 0.006 4.714 0.006 {built-in method _cvxcore.LinOp_set_dense_data}
1 2.398 2.398 138.383 138.383 <string>:1(<module>)
13 2.073 0.159 97.705 7.516 quad_form.py:147(decomp_quad)
91 1.140 0.013 1.140 0.013 {built-in method builtins.abs}
26 0.994 0.038 0.994 0.038 {method 'dot' of 'numpy.ndarray' objects}
1 0.571 0.571 4.045 4.045 {pandas._libs.reduction.reduce}
Как вы можете видеть, decompy.py:eigh
- это функция, которая занимает больше всего времени, поэтому я хотел бы цитонизировать ее, если это возможно,Это часть scipy
, которую, я полагаю, уже следует скомпилировать, когда я использую cimport
, но поскольку она вызывается в cvxpy
, я предполагаю, что она использует версию Python, а не версию Cython.Нужно ли цифонизировать cvxpy
, чтобы использовать cython numpy
?