【发布时间】:2014-10-28 17:06:13
【问题描述】:
我必须在球形极坐标图中绘制天线响应模式。
我首先创建 theta(t) 和 phi(p) 值。然后是必须为每个theta[i] 和phi[i] 计算的F_c 和F_s。
t=np.linspace(-math.pi/2, math.pi/2, num=x)
p=np.linspace(-math.pi, math.pi, num=x)
for k in xrange(x):
for j in xrange(x):
for i in xrange(n):
F_c=F_c_F_s.F_c(theta[i],phi[i],t[j],p[k])
F_s=F_c_F_s.F_s(theta[i],phi[i],t[j],p[k])
sum_F_c[j][k]=sum_F_c[j][k]+F_c
sum_F_s[j][k]=sum_F_s[j][k]+F_s
mod_F[j][k]=math.log((math.pow(sum_F_c[j][k],2)+math.pow(sum_F_s[j][k],2)),10)
现在每个t 和p 的值都是mod_F。对于 theta 的每个值以及相应的每个 phi 值,我都会计算笛卡尔坐标。然后要制作曲面图,我有以下内容:
fig = p.figure()
ax = Axes3D(fig)
ax.plot_wireframe(x,y,z)
ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap=cm.jet)
p.show()
问题是,它非常慢!即使对于 x=10 即 10 x 10 网格,也需要很多时间。有没有办法以更好更快的方式做到这一点?
【问题讨论】:
-
F_c和F_s是什么。或许可以对这个三重循环进行矢量化。 -
F_c和F_s是该模式的两个组成部分。我必须计算所有i并将它们相加。最后我需要F_c和F_s的平方和的log。代码中较慢的部分是绘图部分。 -
时间几乎肯定是花在F_c_F_s.F_c和F_c_F_s.F_s上;循环中没有其他任何东西需要这么多时间(至少,当它只执行 1000 次时)。如果没有看到这些代码,我们无能为力。
-
here 是代码的链接。 F_map.py 是主要代码。
-
这个问题似乎是题外话,因为它是关于改进工作代码
标签: python matplotlib polar-coordinates