Превратите куб в список точек данных и списки x, y и z
Это немного далеко, но я подумал спросить здесь, прежде чем сам написать это.
У меня есть 3D-куб данных с координатами lon, lat и height. Я хочу 4 1D векторов данных во всех точках: долгота, широта, высота и данные. Это сделано для того, чтобы я мог записать его в файл ASCII в виде списка точек с их местоположением. Делать это для данных легко с изменением формы, но более хитрая часть превращает координаты в правильные векторы.
Кто-нибудь уже сделал это и есть какие-то подсказки?
2 ответа
Я не уверен на 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-й coord.points
массивы в трехмерные массивы, которые затем можно обрабатывать так же, как массив данных.
Другой вариант заключается в использовании itertools
построить произведение всех координатных точек и сгладить массив данных куба:
points_prod = itertools.product(cube.coord('height').points,
cube.coord('latitude').points,
cube.coord('longitude').points)
flat_data = cube.data.reshape(-1)
itertools
product - это генератор, который мы можем использовать, преобразовав его в список. Затем мы можем индексировать список продуктов и массив сглаженных данных. Индекс i
из списка продуктов будут координаты для значения данных i
в массиве уплощенных данных:
points_prod_list = list(points_prod)
print '{} -- {}'.format(points_prod_list[i], flat_data[i])
Думая о конкретных порядках данных и обеспечивая правильные координаты для каждой точки данных...
До тех пор, пока вы получаете порядок измерений, совпадающий с порядком их печати, это всегда будет связывать правильные значения координатной точки со значением данных, которое описывают эти значения точек.
Это довольно сложно описать, но это можно продемонстрировать, просто используя приведенный выше код. Это относится к тому факту, что первая напечатанная координата измерения описывает крайнюю внешнюю ось массива данных куба и порядок, в котором itertools.product создает произведение всех входных комбинаций, и порядок, в котором NumPy выравнивает массив. В принципе, сама Iris полагается на эти упорядочения, чтобы убедиться, что значения координатных точек описывают правильные значения данных!