这有点远,但我想在自己写这篇文章之前先在这里问一下。
我有一个带有 lon、lat 和 height 坐标的 3D 数据立方体。我想要所有点的数据的 4 个 1D 向量,经度、纬度、高度和数据。这样我就可以将其作为包含位置的点列表写入 ASCII 文件。通过重塑对数据执行此操作很容易,但更棘手的部分是将坐标转换为正确的向量。
有没有人已经这样做并有一些提示?
这有点远,但我想在自己写这篇文章之前先在这里问一下。
我有一个带有 lon、lat 和 height 坐标的 3D 数据立方体。我想要所有点的数据的 4 个 1D 向量,经度、纬度、高度和数据。这样我就可以将其作为包含位置的点列表写入 ASCII 文件。通过重塑对数据执行此操作很容易,但更棘手的部分是将坐标转换为正确的向量。
有没有人已经这样做并有一些提示?
我不是 100% 确定我已经正确理解了目标,但是这样的事情会做你想要的吗?
lats = []
lons = []
heights = []
data = []
for point_cube in cube.slices_over(['latitude', 'longitude', 'height']):
lats.append(point_cube.coord('latitude').points[0])
lons.append(point_cube.coord('longitude').points[0])
heights.append(point_cube.coord('height').points[0])
data.append(point_cube.data)
或者为了更有效(几乎可以肯定),您可以探索使用numpy.meshgrid函数将您的 1-dcoord.points
数组转换为 3-d 数组,然后您可以以与数据数组相同的方式处理这些数组。
另一种选择是用于itertools
构建所有坐标点的乘积并展平立方体的数据数组:
points_prod = itertools.product(cube.coord('height').points,
cube.coord('latitude').points,
cube.coord('longitude').points)
flat_data = cube.data.reshape(-1)
该itertools
产品是一个生成器,我们可以通过将其转换为列表来使用它。然后我们可以索引产品列表和展平的数据数组。产品列表的索引i
将是i
展平数据数组中数据值的坐标点:
points_prod_list = list(points_prod)
print '{} -- {}'.format(points_prod_list[i], flat_data[i])
考虑特定的数据顺序并确保每个数据点都有正确的坐标......
只要您获得的尺寸顺序与它们的打印顺序相同,这将始终将正确的坐标点值链接到这些点值描述的数据值。
这很难描述,但可以简单地使用上面的代码来合理地演示。它涉及到这样一个事实,即第一个打印的维度坐标描述了立方体数据数组的最外轴,以及 itertools.product 创建所有输入组合的乘积的顺序,以及 NumPy 展平数组的顺序。但从根本上说,Iris 本身就是依靠这些排序来确保其坐标点值描述正确的数据值!