То, что вы спрашиваете, не похоже на стандартную функциональность. Но в два этапа это возможно. Сначала lambdify выражение, а затем создайте функцию, которая генерирует предполагаемый 2D-массив через numpy s широковещательную рассылку :
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)
Чтобы начать нумерацию при 1 вместо 0 используйте np.arange(1, m+1)
и np.arange(1, n+1)
.
В качестве теста функция, такая как 100 * m + n
, позволяет легко проверить, работает ли подход должным образом.
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)
Вывод:
array([[101, 102, 103],
[201, 202, 203]])