Похоже, у вас есть несколько разных вопросов.Позвольте мне посмотреть, смогу ли я ответить более абстрактно, и вы можете собрать воедино
Параллельно
Один очень простой и простой способ параллельной работы в Python - это multiprocessing
ЕслиВы применяете одну и ту же функцию много раз, вместо:
res = [myfun(arg) for arg in args]
вы можете сделать:
import multiprocessing as mp
with mp.Pool() as pool:
res = pool.map(myfun,args)
Существуют ограничения.И myfun
, и args
должны быть замачиваемы (что lambda
равно , а не , поэтому вы захотите указать это в своем коде)
Вложенные циклы
InВообще, петельные петли медленные.При работе с NumPy лучше «векторизовать», если вы можете.
Поэтому вместо того, чтобы просыпаться по каждому [i,j]
элементу d_matrix
, посмотрите, сможете ли вы поработать с ними всеми одновременно.Поэтому вычислите матрицу grad_F
(а не функцию) и добавьте ее.Вам все еще понадобится ваша временная петля, но вы сможете решить d_matrix
за одно, очень быстрое действие.
Другие советы:
Можете ли вы заранее вычислить rho_barre
.Может быть, использовать scipy.integrate.cumtrapz
для вычисления этого?
Кроме того, попробуйте написать меньше однострочников.Используйте новые функции вместо лямбд.Это облегчит понимание вашего кода!