python - 您如何获得 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]
谢谢你。
解决方案
您的问题与热图没有太大关系,这是一个重塑数据的问题。
根据您的问题,我了解到 (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()
推荐阅读
- node.js - 如何跟踪使用 nightwatch 和 selenium 异步渲染的许多元素?
- python - 如何获得变量输出的平均值?
- api - 使用 Web 地址的 API
- python - 有条件地合并数组的numpy方法是什么?
- haskell - Haskell 函数根据子列表的长度对整数列表的列表进行排序
- typescript - lodash 获取正确的类型
- php - htaccess 不拒绝 PHP 访问文件
- python - Google Cloud 中 Python 3 的类型包返回错误
- ruby-on-rails - 只有用户用户名和用户发布的 Rails 路由
- ios - 收到承诺
而不是 NSMutableURLRequest