我在计算一个方阵V
,它的每个元素都是我用sympy
计算的积分。我只计算一个定积分V_nm
,其结果是一个具有符号指数m
和n
的数值表达式。说V_nm
看起来像这样:
>>> V_nm
sin(3*n)*cos(m)
现在我想用m
和n
作为数组的索引,从V_nm
中生成一个二维数值(非符号!)矩阵。假设对于2x2矩阵,给定V_nm
的结果将是:
[[sin(3)cos(1) sin(3)cos(2)]
[sin(6)cos(1) sin(6)cos(2)]]
也就是说,n
指定列,m
指定行。(注意:我从1开始m
和n
,而不是0,但这并不重要)
我如何做到这一点?
我知道我可以在列表理解中使用V_nm.subs([(n, ...), (m, ...)])
,然后使用evalf()
,但这是一条漫长的道路。我希望通过lambdify
实现这一点。我知道如何对一维数组使用lambdify
。你能告诉我如何在二维阵列上实现它吗
你所问的看起来不像是一个标准的功能。但通过两个步骤,这是可能的。首先lambdify表达式,然后创建一个函数,通过numpy的broadcasting生成所需的2D数组:
要使编号从1而不是0开始,请使用
np.arange(1, m+1)
和np.arange(1, n+1)
作为测试,像
100 * m + n
这样的函数可以很容易地验证该方法是否按预期工作输出:
有一个Symphy的
FunctionMatrix
专门针对这种情况。请注意,它使用基于零的索引:相关问题 更多 >
编程相关推荐