<p>你所问的看起来不像是一个标准的功能。但通过两个步骤,这是可能的。首先<a href="https://docs.sympy.org/latest/modules/utilities/lambdify.html" rel="nofollow noreferrer">lambdify</a>表达式,然后创建一个函数,通过numpy的<a href="https://numpy.org/doc/stable/user/basics.broadcasting.html" rel="nofollow noreferrer">broadcasting</a>生成所需的2D数组:</p>
<pre class="lang-py prettyprint-override"><code>from sympy import sin, cos, lambdify
from sympy.abc import m, n
import numpy as np
V_mn = sin(3 * n) * cos(m)
V_mn_np = lambdify((m, n), V_mn)
# using list comprehension:
# V_mn_np2D = lambda m, n: np.array([[V_mn_np(i, j) for j in range(n)] for i in range(m)])
# using numpy's broadcasting (faster for large arrays):
V_mn_np2D = lambda m, n: V_mn_np(np.arange(m)[:, None], np.arange(n))
V_mn_np2D(2, 2)
</code></pre>
<p>要使编号从1而不是0开始,请使用<code>np.arange(1, m+1)</code>和<code>np.arange(1, n+1)</code></p>
<p>作为测试,像<code>100 * m + n</code>这样的函数可以很容易地验证该方法是否按预期工作</p>
<pre class="lang-py prettyprint-override"><code>W_mn = 100 * m + n
W_mn_np = lambdify((m, n), W_mn)
W_mn_np2D = lambda m, n: W_mn_np(np.arange(1, m+1)[:, None], np.arange(1, n+1))
W_mn_np2D(2, 3)
</code></pre>
<p>输出:</p>
<pre><code>array([[101, 102, 103],
[201, 202, 203]])
</code></pre>