Мне нужно построить диаграмму направленности антенны в сферическом полярном участке. Сначала создаю тета (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, это занимает много времени. Есть ли способ сделать это лучше и быстрее?
какие 'F_c' и' F_s'. Можно было бы векторизовать этот тройной цикл. –
'F_c' и' F_s' являются двумя компонентами шаблона. Я должен рассчитать как для всех 'i', так и суммировать их. Наконец, мне нужен «лог» суммы квадратов (эти суммируются по i) 'F_c' и' F_s'. Более медленная часть кода - это часть графика. – Devansh
Время почти наверняка проводится в F_c_F_s.F_c и F_c_F_s.F_s; ничто другое в цикле не занимает столько времени (по крайней мере, когда оно выполняется только 1000 раз). Не видя кода для них, мы не можем многое сделать. – Gretchen