3D numpy阵列故障和提取数据



我有一些关于2020年澳大利亚丛林大火的数据,我正在努力处理。

我在numpy数组中有一些数据:lat(表示纬度(、lon(表示经度(和时间。

lat的阵列大小为:350,形状为:(350,(

lon的阵列大小为:500,形状为:(500,(

时间的数组大小为:31,形状为:(31,(-这是有道理的,因为它是2020年1月的一个月中的几天。

我有另一个数组,total_combulation_rate:

total_combustion_rate的数组大小为:5425000,形状为:(313350500(-因此它由一个月中的天、latlon值组成。

我有一个名为area_array:的最后一个数组

area_array的数组大小为:175000,形状为:(350500(。它包含每个网格正方形的面积,单位为km2。

我被要求计算出2020年1月澳大利亚发生火灾的比例。

不过我不确定该如何解决这个问题。

total_combulation_rate中有很多值为零。去掉它们只会给我留下一些条目,这意味着每个网格广场都有某种描述的火在燃烧。我可以看到,我需要对area_array中相同的lon和lat值求和,这些值在total_combulation_rate中不为零,这应该会给我着火的网格正方形的总面积。

转换成百分比应该是:(着火总面积/area_array中包含的总面积(*100。

我完全不知道该怎么做,因为我对3D numpy数组有点困惑。有人能帮忙吗?

我假设numpy是以名称np导入的,并且所有数组都是numpy数组。

您必须从沿时间维度对total_combustion_rate求和开始。通过这种方式,您将获得一个2-D数组,其中每个条目代表数据集每个位置随时间的积分值。

total_combustion_rate.sum(axis=0)

现在,这个数组就是您可以查找0值的确切位置。其想法是确定非零条目的位置,以便您可以使用它们的索引来探测area_array并获得所需的相关区域。掩码数组使任务变得非常容易,因为它会"隐藏"这些您不想要的条目,即总和为0的条目。

np.ma.MaskedArray(area_array, total_combustion_rate.sum(axis=0) == 0)

当您有了遮罩数组时,您所需要做的就是将未遮罩区域的总和与所有区域的总和进行比较。同样,这是毫不费力地实现的。

(np.ma.MaskedArray(area_array, total_combustion_rate.sum(axis=0) == 0).sum() / area_array.sum())

一行(长(。:(

最新更新