2014-11-18 4 views
0

я выполнил следующий расчет:Имеются ли результаты кеширования sympy/mpmath и какие последствия будут иметь последствия для скорости?

from sympy import mpmath as mp 
mp.besseljzero(1000, 100) 

, которые по понятным причинам потребовалось некоторое время> 10s, если не больше (не раз это).

Последующие звонки были значительно быстрее, что заставило меня подумать, что оно кэширует результаты. Мне было интересно, какие другие функции/caclulations sympy cahces?

Означает ли это, если я хочу, чтобы вычислить mp.besseljzero(n, m) для п < N и т < М, лучше вычислить mp.besseljzero(N-1, M-1), а затем получить доступ к другим результатам?

Заранее спасибо.

Я должен добавить, что я нашел эту информацию на часто задаваемом FAQ. Кажется, что поддерживается какое-то кеширование. Если есть дополнительная документация, вы можете указать мне, что было бы полезно!

https://github.com/sympy/sympy/wiki/Faq

ответ

2

mpmath имеет свое собственное запоминание, отделенное от остальной части SymPy, восстанавливающего когда точность изменения.

У SymPy есть кеш, который кэширует самые дорогие операции. В версиях SymPy до 0.7.6, кеш неограничен, что может привести к проблемам с памятью. В 0.7.6 вверх кеш представляет собой кеш LRU, который использует меньше памяти, но немного медленнее. Чтобы вернуть скорость, вы можете установить пакет fastcache, который является кешем LRU, написанным на C, что значительно улучшает производительность.

На странице часто задаваемых вопросов вы можете указать, как отключить кеш, или очистить его вручную.

+0

означает ли это, что он кэширует все результаты? Я немного смущен относительно того, что на самом деле получается кэшированным. Кроме того, что касается кэширования sympy vs mpmath в моем примере, какой из двух происходит? – evan54

+0

Нет, кешируются только определенные функции. Я не уверен в mpmath, но для SymPy кешируются только основные функции, которые запускаются многократно. – asmeurer

+1

Для вашего примера вы используете только mpmath, поэтому кэш SymPy не входит в игру. – asmeurer