我正在使用SciPy的binned_statistic_2d()
函数来确定XArray Dataset
中数据的分箱平均值。我的用法如下:
LTSbins = list(cloudcorrLTSw.LTS.values)[::5]
OMEGAbins = list(cloudcorrLTSw.OMEGA_700.values)[::5]
teststat = binned_statistic_2d(cloudcorrLTSw.LTS, cloudcorrLTSw.OMEGA_700, cloudcorrLTSw.CLD_RHO,
statistic=np.nanmean,bins=[LTSbins, OMEGAbins])
其中cloudcorrLTSw.LTS
、cloudcorrLTSw.OMEGA_700
和cloudcorrLTSw.CLD_RHO
是138个条目向量,前两个是xarray数据集的维度,后者是LTS-OMEGA_700空间上数据集中的变量。LTS、OMEGA_700和CLD_RHO数据本身来自从空间数据开发的时间序列,并且已经被变换成它们的当前状态,因此,作为结果,存在与坐标值一样多的CLD_RHO值,这意味着数据是稀疏的,每行和每列具有许多NaN。这就是使用np.nanmean作为统计量而不是内置均值函数的原因。
对于the SciPy documentation page for this function,,它旨在返回(除其他外)形状为(nx,ny)的ndarray,其中x和y由binned_statistic_2d
函数调用中的bins
kwarg确定。然而,我得到的是一个138 x27 x27(27 x27,因为所描述的合并导致28个值),第一维完全是NaN。因此,我必须通过np.nanmean
* 再次 * 传递teststat.statistic
,以删除多余的维度,这个操作并不需要太多时间,但会让我担心会干扰数据。我把稀疏的数据插入图中可能是明智的,
但这本身就是另一个问题了所以,在我解决这个问题之前,这是binned_statistic_2d()
的预期输出吗?
更新图片以遵循some 3128的建议:
根据some 3128的答案使用statistic = 'count'
更新了图像:
我使用的数据,我通过创建一个xarray对象,使用LTS和omega作为坐标,CLD_RHO作为这些轴上的变量,“强迫”在LTS-omega空间中。通过使用原始数据(预先制作一个新的数据集),我能够得到 * 这个 * 图像,这似乎更合理。我想我可以把这当作解决了。
2条答案
按热度按时间sqserrrh1#
我合成了一些测试数据(rho中有50%的NaN),并通过binning函数运行它。结果和代码如下。
数据类型:
使用热图可视化的分箱函数的输出:
当我对数据进行装箱时,我将统计量设置为
"count"
。这提供了对每个括号中的观测数的完整性检查。binning函数还返回bin的边缘值,我已经将其覆盖到图上。颜色反映了散点图上原始数据的密度,所以看起来很有意义。我认为如果你能通过上面的步骤运行你的数据,这将是值得一看的。
7eumitmz2#
看起来您可能面临一个问题,要么是在使用函数的方式上,要么是由于输入数据的特征。一个可能的原因可能与您如何使用LTSbins和OMEGAbins列表定义bin有关。值得确认的是,这些列表准确地表示了您打算使用的条格边缘。
此外,最好验证数组cloudcorrLTSw.LTS、cloudcorrLTSw.OMEGA_700和cloudcorrLTSw.CLD_RHO是否具有正确的形状,并与您尝试实现的分箱策略正确对齐。如果这些数组中的任何一个具有意外的形状或包含NaN值,则它们可能会导致您在binned_statistic_2d函数中看到的意外行为。像这样的问题有时会导致结果不太符合你的最初期望。