Sympy中subs()函数失效问题如何解决?
问题原因及解决办法
问题原因
SymPy的subs()方法无法直接将符号t替换为NumPy数组——SymPy的符号表达式是针对单个符号值设计的,而NumPy数组属于批量数值对象,两者类型不兼容,导致替换操作未生效,符号t被保留。
解决方案
方法一:使用lambdify转换为数值计算函数(推荐)
lambdify可以将SymPy的符号表达式转换为能直接处理NumPy数组的函数,是批量数值替换的最优方案:
from sympy import * import numpy as np t = Symbol('t') q = Matrix([(10*cos(t), 10*sin(t), 10*(10-(t/10)))]) # 将符号表达式转为支持numpy数组的函数 q_func = lambdify(t, q, 'numpy') p = np.linspace(0, 100, 1000) qsub = q_func(p) print(qsub)
方法二:遍历数组逐个替换(不推荐大数组)
如果需要用subs实现,可以遍历数组中的每个元素逐个替换,再整理结果:
from sympy import * import numpy as np t = Symbol('t') q = Matrix([(10*cos(t), 10*sin(t), 10*(10-(t/10)))]) p = np.linspace(0, 100, 1000) # 逐个替换数组元素 qsub_list = [q.subs(t, val) for val in p] # 转换为numpy数组方便后续数值操作 qsub = np.array(qsub_list, dtype=np.float64) print(qsub)
内容的提问来源于stack exchange,提问作者gerald
相关产品推荐
相关产品推荐

