Есть ли способ визуализировать среднее азимутальное трехмерное декартово пространство?

У меня есть набор данных, содержащий значения в трехмерном пространстве 200x200x38. Данные сосредоточены в [100,100,z], где z — высота, а первые два значения — горизонтальные координаты x и y. Я пытаюсь создать визуализацию поперечного сечения, которое усредняет значения в наборе данных по радиалу и на каждой высоте (создавая среднее значение высоты и радиуса).

Самый эффективный способ расчета радиального профиля В этом сообщении описывается, как сделать radial average for a 2D dataset,̶b̶u̶t̶ ̶I̶ ̶d̶o̶n̶'̶t̶ ̶q̶u̶i̶t̶e̶ ̶u̶n̶d̶e̶r̶s̶t̶a̶n̶d̶ ̶h̶o̶w̶ ̶t̶h̶e̶y̶ ̶d̶i̶d̶ ̶t̶h̶e̶y̶ ̶b̶i̶n̶n̶e̶d̶ ̶t̶h̶e̶i̶r̶ ̶d̶a̶t̶a̶ ̶i̶n̶t̶o̶ ̶d̶i̶f̶f̶e̶r̶e̶n̶t̶ ̶r̶a̶d̶i̶i̶ ̶e̶i̶t̶h̶e̶r̶ ̶s̶i̶n̶c̶e̶.̶ ̶ ̶I̶'̶v̶e̶ ̶d̶e̶f̶i̶n̶e̶d̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶s̶ ̶f̶o̶r̶ ̶r̶a̶d̶i̶i̶ ̶a̶n̶d̶ ̶a̶n̶g̶l̶e̶ ̶f̶r̶o̶m̶ ̶c̶e̶n̶t̶e̶r̶,̶ ̶b̶u̶t̶ ̶d̶o̶n̶'̶t̶ ̶k̶n̶o̶w̶ ̶h̶o̶w̶ ̶t̶o̶ ̶c̶o̶n̶v̶e̶r̶t̶ ̶M̶y̶ ̶c̶a̶r̶t̶e̶s̶i̶a̶n̶ ̶d̶a̶t̶a̶ ̶i̶n̶t̶o̶ ̶a̶ ̶c̶y̶l̶i̶n̶d̶r̶i̶c̶a̶l̶ ̶c̶o̶r̶ ̶n̶a̶t̶e̶ ̶s̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶p̶h̶.

def radial_profile(data, center):
    y, x = np.indices((data.shape))
    r = np.sqrt((x - center[0])**2 + (y - center[1])**2)
    r = r.astype(np.int)

    tbin = np.bincount(r.ravel(), data.ravel())
    nr = np.bincount(r.ravel())
    radialprofile = tbin / nr
    return radialprofile 
Cent=[100,100]
Rav=[]
for i in range(37):
    B=ref[:,:,i,0]
    if B == -999.9:
        B=np.nan
    RRR=radial_profile(B,Cent)
    Rav.append(RRR)
plt.imshow(Rav, vmin=-15, vmax=70)
plt.colorbar();
plt.show()

Используя это, я смог построить график, но мне нужно найти способ удалить значения -999,9 из среднего. Я пытался присвоить ему значение null, но безуспешно. Сюжет иначе работает.


person atmosking    schedule 02.06.2019    source источник
comment
Если вы не понимаете принятый ответ на этот вопрос, то что вы на самом деле спрашиваете? Хороший ответ на ваш вопрос, по сути, будет основываться на этом...   -  person Mad Physicist    schedule 02.06.2019
comment
Задавая вопрос, люди смогут лучше помочь, если вы предоставите код, который они смогут легко понять и использовать для воспроизведения проблемы. Не могли бы вы опубликовать образцы данных и/или код?   -  person Kapocsi    schedule 02.06.2019


Ответы (1)


def radial_profile(data, center):
    y, x = np.indices((data.shape))
    r = np.sqrt((x - center[0])**2 + (y - center[1])**2)
    r = r.astype(np.int)

    tbin = np.bincount(r.ravel(), data.ravel())
    nr = np.bincount(r.ravel())
    radialprofile = tbin / nr
    return radialprofile 
Cent=[100,100]
Rav=[]
for i in range(37):
    dbz=np.array(ref)
    dbz[dbz == -999.9]=np.nan
    B=dbz[:,:,i,0]
    RRR=radial_profile(B,Cent)
    Rav.append(RRR)
plt.imshow(Rav, vmin=-15, vmax=70)
plt.colorbar();
plt.show()

Приношу свои извинения, мне следовало внимательнее взглянуть на попытку понять сообщение, на которое я ссылался в своем вопросе.

Если у кого-то есть более чистые или эффективные решения, я был бы признателен.

person atmosking    schedule 02.06.2019