You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多变量SymPy表达式lambdify为单参数x的函数?

问题描述

现有SymPy表达式1.0 * H * L ** 3 * W **2,包含变量H、L、W。使用sp.lambdify([sp.Symbol(vari) for vari in variables], 表达式)会生成接收H、L、W三个单独参数的函数,但需求是生成以x为参数的函数,其中H=x[0]、L=x[1]、W=x[2]。尝试直接用xreplace将变量替换为x[index]后执行lambdify未成功,寻求可行实现方法。

解决方案

方法一:使用SymPy的IndexedBase处理数组索引

通过IndexedBase定义数组符号x,将原变量替换为x的索引形式,再执行lambdify:

import sympy as sp

# 定义数组符号x
x = sp.IndexedBase('x')
# 定义原变量和表达式
H, L, W = sp.symbols('H L W')
expr = 1.0 * H * L**3 * W**2

# 建立变量到x索引的映射
var_index_map = {H: x[0], L: x[1], W: x[2]}
# 替换表达式中的变量
expr_with_x = expr.subs(var_index_map)

# 生成以x为参数的函数
func = sp.lambdify('x', expr_with_x, modules='numpy')  # 可根据需求替换为'math'等模块

# 测试示例
import numpy as np
test_input = np.array([2, 3, 4])
print(func(test_input))  # 输出:864.0

方法二:包装多参数函数

先生成接收单独参数的函数,再用一个简单的包装函数将数组x拆分为对应参数传入:

import sympy as sp

# 定义变量和表达式
H, L, W = sp.symbols('H L W')
expr = 1.0 * H * L**3 * W**2

# 生成多参数函数
multi_param_func = sp.lambdify([H, L, W], expr)

# 包装成单参数x的函数
def array_param_func(x):
    return multi_param_func(x[0], x[1], x[2])

# 测试示例
test_input = [2, 3, 4]
print(array_param_func(test_input))  # 输出:864.0

方法三:直接在lambdify中使用lambda表达式映射

通过lambdify的modules参数自定义变量到x索引的映射:

import sympy as sp

# 定义变量和表达式
H, L, W = sp.symbols('H L W')
expr = 1.0 * H * L**3 * W**2

# 生成函数,自定义模块映射变量到x的索引
func = sp.lambdify(
    'x',
    expr,
    modules={'H': lambda x: x[0], 'L': lambda x: x[1], 'W': lambda x: x[2]}
)

# 测试示例
test_input = [2, 3, 4]
print(func(test_input))  # 输出:864.0

内容的提问来源于stack exchange,提问作者adrckul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:45:38