Как вы могли получить среднее значение 2D-карты тепла для массива 3d numpy - PullRequest
0 голосов
/ 18 апреля 2020

Я хотел бы вывести двумерные научные c цифры для облака 3D-точек, с которым я сейчас работаю. Данные состоят из одного массива 3D numpy, определяющего координаты в трех измерениях (x, y и z), и другого массива numpy, который состоит из концентрации (или интенсивности) в каждой точке. Я хотел бы усреднить результаты по оси z, чтобы я мог, например, построить среднюю концентрацию на 2D (x, y) тепловой карте. Как бы я go усреднил эти результаты?

Набор данных выглядит следующим образом: «координаты»: [[x1, y1, z1], [x2, y2, z2], ..., [xn, yn, zn]] «концентрация»: [ c1, c2, ... cn]

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Ваш вопрос не имеет ничего общего с тепловой картой, это вопрос изменения формы данных.
Из вашего вопроса я понимаю, что каждая точка в плоскости (x, y) имеет несколько соответствующих координат z.
Вам необходимо вычислить ваши интенсивности (средние концентрации) в двумерном массиве в соответствии с различными значениями x и y. Для этого нужно выполнить 4 шага:
- определить точки координат (x, y) с помощью ==
- преобразовать его в одномерный массив с помощью numpy.prod (перевести как «и»)
- извлечь соответствующие концентрации numpy.extract
- вычислить среднее значение с помощью numpy.mean
Вы не можете избежать итерации по точкам.

Я пробовал это со случайными значениями, и кажется, работа:

import numpy as np
import matplotlib.pyplot as plt

l = 5000
points = np.random.random_integers(0, 10, (l,3))
plane_points = points[:, 0:2]
cc = np.random.random(l)
intensity = np.zeros((11,11))
grid = np.arange(11)

for i in grid :
    for j in grid :
        intensity[i, j] = np.mean( np.extract( np.prod( plane_points == [i,j], axis=1 ), cc) )


x_mesh,y_mesh = np.meshgrid(grid, grid)
plt.pcolormesh(x_mesh,y_mesh, intensity)
plt.colorbar()
plt.show()
0 голосов
/ 07 мая 2020

Я решил проблему следующим образом. Я подумал, что мне не нужно заботиться о z-координате различных точек, так как 2D-карта тепла будет усреднять значения в каждой сетке. Я решил использовать hexbin, так как эта функция может лучше разделить все пространство, чем квадратная карта.

from matplotlib import pyplot as plt
from matplotlib import cm as cm

x = array['coordinates'][0]
y = array['coordinates'][1]
c = array2['concentration']

plt.hexbin(x, y, C=c, cmap=cm.jet, gridsize=15,bins=None)
cb = plt.colobar()
plt.xlabel('x coordinates')
plt.ylabel('y coordinates')
plt.show() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...