对numpy数组的表达式数组

时间:2016-08-03 17:07:45

标签: python arrays numpy sympy

我有一个同情阵列

sympyarray = Matrix([[2/(dx**2*(exp(I*theta) + 1)), -2*exp(-I*theta)/dx**2, 2*exp(-I*theta)/(dx**2*(exp(I*theta) + 1))]])

并希望将其转换为numpy数组

numpyarray=np.array([2/(dx**2*(np.exp(1j*theta) + 1)), -2*np.exp(-1j*theta)/dx**2, 2*np.exp(-1j*theta)/(dx**2*(np.exp(1j*theta) + 1))])

并想知道是否有任何好方法可以做到这一点?

我的方法到现在为止如下:

  1. 使用sympy.subs
  2. 将sympyarray中的复杂“I”转换为“1j”
  3. 使用

    将sympy数组转换为numpy数组

    numpyarray = sympyarray.tolist()

  4. 插入“np。”在打印的numpyarray中的所有exp(1j * theta)之前,因为.tolist()不会将sympy指数变为numpy指数。
  5. 这肯定是一种更简单的方法吗?

    注意:据我所知,lambdify不是这里的答案。当我阅读文档时,lambdify将一个sympy表达式转换为需要数字输入的函数?或者我离开了?

1 个答案:

答案 0 :(得分:1)

使用lambdify

In [10]: expr = Matrix([[2/(dx**2*(exp(I*theta) + 1)), -2*exp(-I*theta)/dx**2, 2*exp(-I*theta)/(dx**2*(exp(I*theta) + 1))]])

In [12]: f = lambdify([dx, theta], expr, 'numpy')

In [15]: f(np.array([1], dtype=complex), np.array([np.pi], dtype=complex))
Out[15]:
array([[[ 0. -1.63312394e+16j],
        [ 2. +2.44929360e-16j],
        [-2. +1.63312394e+16j]]])