Недавно, по типу ответа элемента stackoverflow, я узнал, как выполнять операции над meshgrids с функциями, которые не были смежными с numpy, используя трюк for-loop для итерации по каждому из элементов в сетке. Я обнаружил, что он работал в большинстве случаев, однако, ниже, по какой-то причине он, кажется, терпит неудачу:
Emag - это длинная функция, которую я создал.Numpy Итерационные вычисления в meshgrid
import numpy as np
X, Y = np.mgrid[0.1:0.15:3j, 0.1:0.15:3j]
Z = np.zeros_like(Y)
po = np.sqrt(X**2 + Y**2)
phio = np.arctan2(Y,X)
print po
print phio
for i in range(po.shape[0]):
for j in range(po.shape[1]):
print po[i,j]
print phio[i,j]
Z[i,j] = Emag(po[i,j], phio[i,j], 0)
print Z[i,j]
Ниже приводится ответ
%run C:/Users/Nigel/Desktop/Nigel07112014.py
[[ 0.14142136 0.16007811 0.18027756] <--- po
[ 0.16007811 0.1767767 0.19525624]
[ 0.18027756 0.19525624 0.21213203]]
[[ 0.78539816 0.89605538 0.98279372] <--- phio
[ 0.67474094 0.78539816 0.87605805]
[ 0.5880026 0.69473828 0.78539816]]
0.141421356237 <--- po[0,0]
0.785398163397 <--- phio[0,0]
732.46186213 <--- Z[0,0]
0.160078105936 <--- po[0,1]
0.896055384571 <--- phio[0,1]
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
кажется, что для второго элемента meshgrid, компьютер имеет проблемы продуцирующие выход для Z. Однако, когда я исполняю Emag для вторых элементов ро и phio отдельно - это прекрасно работает (см ниже):
Emag(0.160078105936, 0.896055384571, 0)
> 589.541876301
, который должен быть вторым элементом Z meshgrid.
Итак, где это происходит? я вставить гораздо более длинное сообщение об ошибке, если запрошенного
Полного сообщения об ошибке ниже:
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
C:\Users\Nigel\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
195 else:
196 filename = fname
--> 197 exec compile(scripttext, filename, 'exec') in glob, loc
198 else:
199 def execfile(fname, *where):
C:\Users\Nigel\Desktop\Nigel07112014.py in <module>()
220 print po[i,j]
221 print phio[i,j]
--> 222 Z[i,j] = Emag(po[i,j], phio[i,j], 0)
223 print Z[i,j]
224
C:\Users\Nigel\Desktop\Nigel07112014.py in Emag(p, phi, z)
149 def Emag(p, phi, z):
150 if z >=0:
--> 151 VE1p = (p * (z-z0) * ((MuZ)/(4 * pi * Eps0 * Eps1)) * exp(j * k1 * R0/(R0**3)) * ((3/(R0**2))- (3 * j * k1/R0)-(k1**2))) - (j * ((MuZ)/(4 * pi * Eps0 * Eps1)) * INTEGRATEZI(lambda kp: J1(kp * p) * A1(kp) * kp * k1z(kp) * (exp(1j * k1z(kp) * (z + z0)))))
152
153 VE1phi = 0
OverflowError: math range error
Как подсказка для быстрой отладки, измените 'Emag' для печати своих аргументов. – gboffi
Для чего это стоит, я попробовал ваш код с помощью «Emag», и он безукоризненно ... возможно, вам нужно опубликовать полную трассу – gboffi
Привет, gboffi. Я добавил полное сообщение об ошибке - имейте в виду, что Emag работает для отдельных значений - просто не когда они находятся в meshgrid – user3065619