1
我使用lambdify
來編譯一個表達式,該表達式是某些參數的函數。每個參數有N
點。所以我需要評估表達N
次。下面顯示了一個關於如何完成的簡化示例。Python 3:Sympy:包含列表信息以優化lambdify
import numpy as np
from sympy.parsing.sympy_parser import parse_expr
from sympy.utilities.lambdify import lambdify, implemented_function
from sympy import S, Symbol
from sympy.utilities.autowrap import ufuncify
def CreateMagneticFieldsList(dataToSave,equationString,DSList):
expression = S(equationString)
numOfElements = len(dataToSave["MagneticFields"])
#initialize the magnetic field output array
magFieldsArray = np.empty(numOfElements)
magFieldsArray[:] = np.NaN
lam_f = lambdify(tuple(DSList),expression,modules='numpy')
try:
for i in range(numOfElements):
replacementList = np.zeros(len(DSList))
for j in range(len(DSList)):
replacementList[j] = dataToSave[DSList[j]][i]
try:
val = np.double(lam_f(*replacementList))
except:
val = np.nan
magFieldsArray[i] = val
except:
print("Error while evaluating the magnetic field expression")
return magFieldsArray
list={"MagneticFields":list(range(10000)), "Chx":list(range(10000))}
out=CreateMagneticFieldsList(list,"MagneticFields*5+Chx",["MagneticFields","Chx"])
print(out)
有沒有方法可以進一步優化此調用?具體來說,我的意思是有沒有辦法讓lambdify
包括我正在計算的點列表,以便循環評估可以優化?
當您使用帶有modules =「numpy」的lambdify時,它會創建一個numpy表達式。您應該能夠將numpy數組作爲參數傳遞給您的lambdified函數,並且表達式將被矢量化爲它們。 – asmeurer
@asmeurer感謝您的信息!我會嘗試的! –