我有一些关于2020年澳大利亚丛林大火的数据,我正在努力处理。
我在numpy数组中有一些数据:lat(表示纬度(、lon(表示经度(和时间。
lat的阵列大小为:350,形状为:(350,(
lon的阵列大小为:500,形状为:(500,(
时间的数组大小为:31,形状为:(31,(-这是有道理的,因为它是2020年1月的一个月中的几天。
我有另一个数组,total_combulation_rate:
total_combustion_rate的数组大小为:5425000,形状为:(313350500(-因此它由一个月中的天、lat和lon值组成。
我有一个名为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())
一行(长(。:(