首页 > 解决方案 > 您如何获得 3d numpy 数组的 2D 热图平均值

问题描述

我想为我目前正在使用的 3D 点云输出 2D 科学数据。数据由一个 3D numpy 数组组成,该数组定义三个维度(x、y 和 z)中的坐标,另一个 numpy 数组由每个点的浓度(或强度)组成。我想在 z 方向上对结果进行平均,这样我就可以在 2D (x,y) 热图中绘制平均浓度。我将如何平均这些结果?

数据集如下所示: '坐标': [[x1, y1, z1], [x2, y2, z2], ..., [xn, yn, zn]] '浓度': [c1, c2, .. .cn]

谢谢你。

标签: pythonnumpymatplotlibplotheatmap

解决方案


您的问题与热图没有太大关系,这是一个重塑数据的问题。
根据您的问题,我了解到 (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()

推荐阅读