将立方体变成数据点列表和 x、y 和 z 列表
Turn a cube into a list of data points and lists of x, y and z
这有点遥不可及,但我想在自己写这篇文章之前先在这里问一下。
我有一个包含经度、纬度和高度坐标的 3D 数据立方体。我想要所有点的 4 个一维数据向量,经度、纬度、高度和数据。这样我就可以将其作为点及其位置的列表写入 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-d coord.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])
考虑特定的数据排序并确保每个数据点的坐标正确...
只要您获得的尺寸顺序与它们的打印顺序相同,这将始终link正确的坐标点值到这些点值描述的数据值。
这很难描述,但可以简单地使用上面的代码合理地演示。它与第一个打印的维度坐标描述立方体数据数组的最外轴、itertools.product 创建所有输入组合的乘积的顺序以及 NumPy 展平数组的顺序有关。不过,从根本上说,Iris 本身就是依靠这些顺序来确保其坐标点值描述正确的数据值!
这有点遥不可及,但我想在自己写这篇文章之前先在这里问一下。
我有一个包含经度、纬度和高度坐标的 3D 数据立方体。我想要所有点的 4 个一维数据向量,经度、纬度、高度和数据。这样我就可以将其作为点及其位置的列表写入 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-d coord.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])
考虑特定的数据排序并确保每个数据点的坐标正确...
只要您获得的尺寸顺序与它们的打印顺序相同,这将始终link正确的坐标点值到这些点值描述的数据值。
这很难描述,但可以简单地使用上面的代码合理地演示。它与第一个打印的维度坐标描述立方体数据数组的最外轴、itertools.product 创建所有输入组合的乘积的顺序以及 NumPy 展平数组的顺序有关。不过,从根本上说,Iris 本身就是依靠这些顺序来确保其坐标点值描述正确的数据值!