簡體   English   中英

為什么復雜網格網格數組上的numpy.exp給出錯誤的實部?

[英]Why is numpy.exp on a complex meshgrid array giving the wrong real part?

我有一個嵌套的復數數組,

xi:

 [[[ 2.51325641-2.34963293j  2.17949212-1.57079633j  2.51325641-0.79195972j]
  [ 2.15322703+3.14159265j  0.00000000+1.57079633j  2.15322703+0.j        ]
  [ 2.51325641+2.34963293j  2.17949212+1.57079633j  2.51325641+0.79195972j]]

 [[ 2.44651048-2.3486959j   2.11452586-1.57079633j  2.44651048-0.79289676j]
  [ 2.08450333+3.14159265j  0.00000000+1.57079633j  2.08450333+0.j        ]
  [ 2.44651048+2.3486959j   2.11452586+1.57079633j  2.44651048+0.79289676j]]]

並采取numpy.exp給我以下內容:

np.exp(xi):

 [[[ -8.67181418e+00 -8.78636871e+00j   5.41404995e-16 -8.84181457e+00j
     8.67181418e+00 -8.78636871e+00j]
  [ -8.61260674e+00 +1.05474013e-15j   6.12323400e-17 +1.00000000e+00j
     8.61260674e+00 +0.00000000e+00j]
  [ -8.67181418e+00 +8.78636871e+00j   5.41404995e-16 +8.84181457e+00j
     8.67181418e+00 +8.78636871e+00j]]

 [[ -8.10419460e+00 -8.22665532e+00j   5.07350124e-16 -8.28565631e+00j
     8.10419460e+00 -8.22665532e+00j]
  [ -8.04059693e+00 +9.84689130e-16j   6.12323400e-17 +1.00000000e+00j
     8.04059693e+00 +0.00000000e+00j]
  [ -8.10419460e+00 +8.22665532e+00j   5.07350124e-16 +8.28565631e+00j
     8.10419460e+00 +8.22665532e+00j]]]

但是,當我逐一檢查它們時,某些元素的實部是不正確的,例如,第一個嵌套數組的第一行的第二列:

In [1]: np.exp(2.17949212-1.57079633j)
Out[1]: (-2.833893031963725e-08-8.8418145374224597j)

但其他方法也可以(例如,數組1行1列1)。

In [2]: np.exp(2.51325641-2.34963293j)
Out[2]: (-8.671814171261488-8.7863687332566318j)

這對我來說毫無意義,因為numpy.exp文檔似乎暗示e ^(a + ib)的計算方式為e ^ a *(cos(b)+ i sin(b)),所以我看不到虛部如何正確而實部卻不正確

是否可以使numpy.exp在我的數組中一致地工作?

編輯:

有人指出,如上定義xi確實可以通過np.exp得到正確的結果。 當我將其定義為上述值的獨立數組時,它也可以在我的python環境中使用。 但是,np.exp(xi)似乎仍無法以我生成xi的方式正常工作:

d = np.array([0.91651514, 0.9797959])

spacing = 3
limit = 4
x = np.linspace(-limit, limit,spacing)
y = np.linspace(-limit,limit,spacing)
X, Y = np.meshgrid(x, y)
def z(x,y):
    return x + 1j * y
z = z(X, Y)

xi = []
for i in range(len(d)):
    xxi = np.arccosh(z/d[i])
    xi.append(xxi)
xi = np.asarray(xi)

我創建xi的方式是否與numpy.exp奇怪地起作用?

根據我的結果,numpy似乎確實計算出正確的結果:

從我的控制台回溯:

import numpy as np

xi = np.array([[
  [2.51325641-2.34963293j,  2.17949212-1.57079633j,  2.51325641-0.79195972j],
  [ 2.15322703+3.14159265j,  0.00000000+1.57079633j,  2.15322703+0.j        ],
  [ 2.51325641+2.34963293j,  2.17949212+1.57079633j , 2.51325641+0.79195972j]],

 [[ 2.44651048-2.3486959j ,  2.11452586-1.57079633j , 2.44651048-0.79289676j],
  [ 2.08450333+3.14159265j , 0.00000000+1.57079633j , 2.08450333+0.j        ],
  [ 2.44651048+2.3486959j ,  2.11452586+1.57079633j , 2.44651048+0.79289676j]]])



xi
Out[7]: 
array([[[2.51325641-2.34963293j, 2.17949212-1.57079633j,
         2.51325641-0.79195972j],
        [2.15322703+3.14159265j, 0.        +1.57079633j,
         2.15322703+0.j        ],
        [2.51325641+2.34963293j, 2.17949212+1.57079633j,
         2.51325641+0.79195972j]],

       [[2.44651048-2.3486959j , 2.11452586-1.57079633j,
         2.44651048-0.79289676j],
        [2.08450333+3.14159265j, 0.        +1.57079633j,
         2.08450333+0.j        ],
        [2.44651048+2.3486959j , 2.11452586+1.57079633j,
         2.44651048+0.79289676j]]])

np.exp(xi)
Out[8]: 
array([[[-8.67181417e+00-8.78636873e+00j,
         -2.83389303e-08-8.84181454e+00j,
          8.67181420e+00-8.78636870e+00j],
        [-8.61260674e+00+3.09174756e-08j,
         -3.20510345e-09+1.00000000e+00j,
          8.61260674e+00+0.00000000e+00j],
        [-8.67181417e+00+8.78636873e+00j,
         -2.83389303e-08+8.84181454e+00j,
          8.67181420e+00+8.78636870e+00j]],

       [[-8.10419466e+00-8.22665531e+00j,
         -2.65563855e-08-8.28565627e+00j,
          8.10419461e+00-8.22665536e+00j],
        [-8.04059697e+00+2.88640789e-08j,
         -3.20510345e-09+1.00000000e+00j,
          8.04059697e+00+0.00000000e+00j],
        [-8.10419466e+00+8.22665531e+00j,
         -2.65563855e-08+8.28565627e+00j,
          8.10419461e+00+8.22665536e+00j]]])

np.exp(2.17949212-1.57079633j)
Out[9]: (-2.833893031963725e-08-8.84181453742246j)

我正在將Python 3.6.5(Anaconda Python)與NumPy版本1.14.3配合使用。 您是否嘗試過在另一台機器/其他python實例上驗證結果?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM