[英]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.