Действительно, проблема больше в plot_surface
.Есть много вещей, которые можно сделать, чтобы улучшить его.Например, затенение занимает много времени и просто изменив одну строку:
colors = [color * (0.5 + norm(v) * 0.5) for v in shade]
на
colors = np.outer(0.5+norm(shade)*0.5,color)
в одной из функций, используемых plot_surface
, я получилсокращение примерно на 28% в общем времени выполнения.Зачем?Функция norm
(ну, класс) настроена для векторизации, но не использовалась таким образом.Я знаю, что есть много таких вещей в этих функциях, которые не очень оптимальны.Изменение двух строк:
for rs in np.arange(0, rows-1, rstride):
for cs in np.arange(0, cols-1, cstride):
на
for rs in xrange(0,rows-1,rstride):
for cs in xrange(0,cols-1,cstride):
в самой функции plot_surface
дает еще одно существенное улучшение - теперь мы сократились на 33% по сравнению с исходным временем выполнения.
Из того, что я видел, код на самом деле написан не столько для эффективности, сколько для того, чтобы заставить его работать из того, что я могу сказать - есть много мест, где вещи, которые можно было бы сделать более векторизованными, используяNumpy и нет.Боюсь, что на самом деле нужна некоторая оптимизация функций matplotlib.