2014-10-28 4 views
0

Мне нужно построить диаграмму направленности антенны в сферическом полярном участке. Сначала создаю тета (t) и значения phi (p). Тогда есть F_c и F_s, которые должны быть рассчитаны для каждого theta[i] и phi[i].Сферическая полярная поверхность в питоне

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) 

Теперь мы имеем значение mod_F для каждого t и p. Для каждого значения 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 × 10, это занимает много времени. Есть ли способ сделать это лучше и быстрее?

+0

какие 'F_c' и' F_s'. Можно было бы векторизовать этот тройной цикл. –

+0

'F_c' и' F_s' являются двумя компонентами шаблона. Я должен рассчитать как для всех 'i', так и суммировать их. Наконец, мне нужен «лог» суммы квадратов (эти суммируются по i) 'F_c' и' F_s'. Более медленная часть кода - это часть графика. – Devansh

+1

Время почти наверняка проводится в F_c_F_s.F_c и F_c_F_s.F_s; ничто другое в цикле не занимает столько времени (по крайней мере, когда оно выполняется только 1000 раз). Не видя кода для них, мы не можем многое сделать. – Gretchen

ответ

0

Вслед работал для меня:

t=np.linspace(0, np.pi, num=x) 
p=np.linspace(-np.pi,np.pi,num=x) 
[T,P]=np.meshgrid(t,p) 
F_c=0.0 
F_s=0.0 

for i in xrange(n): 
    F_c+=F_c_F_s.F_c(theta[i],phi[i],T,P) 
    F_s+=F_c_F_s.F_s(theta[i],phi[i],T,P) 
mod_F=(np.log10((np.power(F_c,2)+np.power(F_s,2)))) 
Смежные вопросы