Python 将随机数据分为轴长不等的规则三维网格

Python 将随机数据分为轴长不等的规则三维网格,python,numpy,scipy,Python,Numpy,Scipy,我在很长一段时间内使用卫星检索。每次检索都是二维的(即水平距离乘以垂直距离),但是每个封装外形都有一个x和y分量。因此,在考虑了所有检索之后,我得到了三维随机点的数据。是否有一种简单的方法将数据存储到轴长度不等的规则3D网格(例如,100 x 400 x 50)中,以便获得频率计数、计算统计数据等 在下面的示例中,如何将具有随机3D位置的“VAL”(根据“position_3D”到规则栅格的“grid_3D”)归为“VAL” import numpy as np from random impo

我在很长一段时间内使用卫星检索。每次检索都是二维的(即水平距离乘以垂直距离),但是每个封装外形都有一个x和y分量。因此,在考虑了所有检索之后,我得到了三维随机点的数据。是否有一种简单的方法将数据存储到轴长度不等的规则3D网格(例如,100 x 400 x 50)中,以便获得频率计数、计算统计数据等

在下面的示例中,如何将具有随机3D位置的“VAL”(根据“position_3D”到规则栅格的“grid_3D”)归为“VAL”

import numpy as np
from random import uniform

lon0 = -130
lon1 = -115
lat0 = 30
lat1 = 45
z0 = 0
z1 = 2500
val0 = 0
val1 = 1.5
n = 1000

# 3D location of each data point
position_3d = np.array([[uniform(lon0,lon1) for p in range(0,n)],[uniform(lat0,lat1) for p in range(0,n)],[uniform(z0,z1) for p in range(0,n)]])

# Value at each 3D location
vals = np.array([uniform(val0,val1) for p in range(0,n)])

# Regular 3D grid to which I want to interpolate
grid_3d = np.array([[np.arange(lon0,lon1,0.1)],[np.arange(lat0,lat1,0.1)],[np.arange(z0,z1,100)]])

您可以使用以下方法将值累积到存储箱中:

输出:

(-130.0, 32.0, 50.0): 1.4007619491996286
(-129.0, 35.0, 100.0): 2.869484362944637
(-128.0, 30.0, 50.0): 0.5105778342561542
(-128.0, 31.0, 50.0): 0.2604120026103076
(-128.0, 41.0, 50.0): 0.5447820061640247
(-127.0, 30.0, 50.0): 1.435518900529197
(-127.0, 39.0, 200.0): 0.36980382180532445
(-126.0, 38.0, 100.0): 0.6952470284057215
(-126.0, 44.0, 150.0): 0.88920810146383
(-124.0, 42.0, 100.0): 0.9449128133812461
(-122.0, 30.0, 200.0): 0.30651791530296635
(-122.0, 36.0, 150.0): 0.5643786814460445
(-120.0, 30.0, 150.0): 0.9034449865962983
(-118.0, 33.0, 50.0): 0.5816494204899461
(-118.0, 35.0, 0.0): 0.21390047166942527
(-118.0, 43.0, 0.0): 0.13808340506585792
(-118.0, 44.0, 0.0): 1.096951129589884
(-117.0, 38.0, 200.0): 0.41514759209450275
(-116.0, 43.0, 50.0): 0.8969605264933811

请准确描述您想要解决的问题是什么,最好使用一些示例输入和输出,以及您尝试过或至少考虑过的方法。可能对您有用,但我们需要知道确切的问题,才能知道如何解决它。@jdehesa我已通过添加一段示例代码编辑了我的原始问题。因此,您想将
vals
中落入每个bin的所有值相加吗?
(-130.0, 32.0, 50.0): 1.4007619491996286
(-129.0, 35.0, 100.0): 2.869484362944637
(-128.0, 30.0, 50.0): 0.5105778342561542
(-128.0, 31.0, 50.0): 0.2604120026103076
(-128.0, 41.0, 50.0): 0.5447820061640247
(-127.0, 30.0, 50.0): 1.435518900529197
(-127.0, 39.0, 200.0): 0.36980382180532445
(-126.0, 38.0, 100.0): 0.6952470284057215
(-126.0, 44.0, 150.0): 0.88920810146383
(-124.0, 42.0, 100.0): 0.9449128133812461
(-122.0, 30.0, 200.0): 0.30651791530296635
(-122.0, 36.0, 150.0): 0.5643786814460445
(-120.0, 30.0, 150.0): 0.9034449865962983
(-118.0, 33.0, 50.0): 0.5816494204899461
(-118.0, 35.0, 0.0): 0.21390047166942527
(-118.0, 43.0, 0.0): 0.13808340506585792
(-118.0, 44.0, 0.0): 1.096951129589884
(-117.0, 38.0, 200.0): 0.41514759209450275
(-116.0, 43.0, 50.0): 0.8969605264933811