网格网格中的Numpy迭代计算

时间:2014-11-23 16:06:25

标签: python for-loop numpy

最近,通过stackoverflow成员的类型响应,我学习了如何使用for-loop技巧对网格中的每个元素进行迭代,使用与numpy不相邻的函数对meshgrids执行操作。我发现它在大多数情况下都适用,但是由于某些原因它似乎失败了:
Emag是我创建的一个很长的功能。

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生成输出。但是,当我分别为po和phio的第二个元素执行Emag时 - 它工作正常(见下文):< / p>

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 

1 个答案:

答案 0 :(得分:1)

如果您正在处理虚构参数的指数,请将exp( j ...中的Emag更改为exp( 1j ...。当它在循环中执行j时,可以从j循环索引接收错误的值。

对于虚构的论点,我是否应该是正确的,我还会检查Emag函数的结果。