Сложность построения двухмерных данных из массива 3D numpy - PullRequest
0 голосов
/ 21 апреля 2020

Итак, у меня есть массив с именем: " radiative_power ", и он имеет форму (31, 350, 500). У меня есть массив " time " с формой 31, у меня есть массив " lat " с формой 350 и массив " lon " с формой 500

Я пытаюсь построить другой массив " co2_flux"(31, 350, 500) против" radiative_power", но мне нужно кое-как извлечь значения из этого трехмерного массива.

Вот что я пробовал:

co2 = co2_flux[0,:,:]
power = radiative_power[0,:,:]

plt.scatter(power, co2)
plt.show()

Вот что я получаю:

[Plot resulting from code above[1]

Это совсем не похоже на то, чего я ожидаю. Где я ошибся?

Спасибо.

РЕДАКТИРОВАТЬ: С дополнительной информацией:

    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    import cartopy.crs as ccrs
    data=np.load('2020_australia.npz')
    lat=data['arr_0'] # latitude values
    lon = data['arr_1'] # longitude values
    time = data['arr_2'] # times
    total_combustion_rate = data['arr_3'] # in kg m-2 s-1
    co2_flux = data['arr_4'] # in kg m-2 s-1
    co_flux= data['arr_5'] # in kg m-2 s-1
    ch4_flux = data['arr_6'] # in kg m-2 s-1
    nmhc_flux = data ['arr_7'] # in kg m-2 s-1
    radiative_power = data['arr_8'] # in W m-2 s-1 a proxy for the fire temp
    area_array = data['arr_9'] #area of each grid square in km^

Размер массива lat: 350 с формой : (350,) и типа: float32 Размер массива lon: 500 с формой: (500,) и типа: float32 Размер массива времени: 31 с формой: (31,) и типа : datetime64 [ns] Размер массива total_combustion_rate: 5425000 с формой: (31, 350, 500) и типа: float32 Размер массива co2_flux: 5425000 с формой: (31, 350, 500) и тип: float32 Размер массива co_flux: 5425000 с формой: (31, 350, 500) и типа: float32 Размер массива ch4_flux: 5425000 с формой: (31, 350, 500) и типа: float32 Размер массива nmhc_flux: 5425000 с формой: (31, 350, 500) и типа: float32 Размер массива radiative_power: 5425000 с формой: (31, 350, 500) и типа: float32. размер массива area_array: 175000 с формой: (350, 500) и типа: float64 * 103 3 *

Я хочу построить график * co2_flux"в кг м-2 с-1 против" radiiative_power Вт м-2 с-1

То, что я пробовал, хотя не работает.

1 Ответ

0 голосов
/ 23 апреля 2020

Ваши данные зависят как от времени, так и от пространства. Когда вы говорите, что хотите построить один набор данных против другого, вам нужно выбрать оба набора данных в определенный момент времени или в определенном месте в пространстве. В качестве примера предположим, что вы хотите увидеть, как два набора данных сравниваются и развиваются в одном месте. Вы можете нарезать оба массива, используя [:, latIndex, lonIndex], что даст вам одномерный массив, который содержит столько элементов, сколько у вас есть временных выборок. С другой стороны, если вы хотите сравнить два набора данных в один момент времени, то вам нужно нарезать массивы с помощью [timeIndex,:,:]. Здесь, однако, вы получаете двумерные массивы, потому что ваши пространственные данные действительно двумерные. Следовательно, вы можете сгладить массив. В результате вы должны иметь возможность разбрасывать свои данные так, как хотите, и это может быть хорошей идеей для определения подобластей на основе широты и долготы, чтобы можно было раскрасить круги рассеяния по географической области, к которой они принадлежат.

Кроме того, что касается комментариев, размещенных под вашими вопросами, возможно, что в первый раз СО2 действительно заполнен нулями, именно там вы его нарезали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...