在Julia中使用SymPy,如何转换示例输入
feature_names = ["1", "x", "y", "z", "x^2", "x y", "x z", "y^2", "y z", "z^2"]
转换为可调用的方法f(x, y, z)
,该方法返回以下表达式的计算结果:
julia >>> f(1, 2, 3)
julia >>> 10-element Vector{float64}:
[1, 1, 2, 3, 1, 2, 3, 4, 6, 9]
这不完全是您所要求的,因为sympify
这样的表达式不适用于sympify
,所以我不得不根据需要添加*
,但使用sympify
和free_symbols
可以自动执行此操作:
feature_names = ["1", "x", "y", "z", "x^2", "x*y", "x*z", "y^2", "y*z", "z^2"]
using SymPy
function F(feature_names)
xs = sympy.sympify.(feature_names)
vars = free_symbols(xs)
function(as...)
subs.(xs, (vars .=> as)...)
end
end
λ = F(feature_names)
λ(1,2,3)
Lamda中变量的顺序是调用sortperm
字符串符号来确定的,因为free_symbols
就是这样对事物进行排序的。