xarray - 返回满足特定条件的数据,而不必使用for循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xarray - 返回满足特定条件的数据,而不必使用for循环相关的知识,希望对你有一定的参考价值。

我正在使用多维数据da_criteria_1or0_hourly

数据(变量)为1或0。

print(da_criteria_1or0_hourly)

输出:

<xarray.DataArray (time: 8760, latitude: 106, longitude: 193)>
dask.array<shape=(8760, 106, 193), dtype=int32, chunksize=(744, 106, 193)>
Coordinates:
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
  * time       (time) datetime64[ns] 2017-01-01 ... 2017-12-31T23:00:00

数据与179212080一样庞大。

我不确定在xarray上我应该使用哪种方法来获取一个新的xarray对象,该对象只返回10可以分配NaN或丢弃)的数据。

我试图使用FOR LOOP使用sel打印出每个坐标的数据,但这非常慢。它可能需要永远。

for time_elem in da_criteria_1or0_hourly.coords['time'].values:
    for lat_elem in da_criteria_1or0_hourly.coords['latitude'].values:
        for lon_elem in da_criteria_1or0_hourly.coords['longitude'].values:
            val = da_criteria_1or0_hourly.sel(time=time_elem,latitude=lat_elem,longitude=lon_elem).values
            if (val == 1):
                print(time_elem, lat_elem, lon_elem, val)

有没有更好的方法呢?

答案

如果我理解你的问题正确,xarray.Dataset.where应该是要走的路:

da_criteria_1or0_hourly.where(da_criteria_1or0_hourly == 1)

这将返回一个新的xarray,其中每个非1的条目现在都是NaN。

50x50x50 xarray的时间比较:

for循环:~56.9456s

where:〜00.0020s

以上是关于xarray - 返回满足特定条件的数据,而不必使用for循环的主要内容,如果未能解决你的问题,请参考以下文章

Spring security:如果用户不满足特定条件,则使每个页面重定向

R语言data.table导入数据实战: .N函数和.I函数使用.N函数返回行数使用.I函数返回满足特定条件行的索引

将数据集与 xarray 合并使变量为 nan

如何返回满足特定条件的会话子集?

MySQL存储过程——一一检查是不是满足某些条件;如果不满足,则退出程序并返回特定消息

如何返回满足特定条件的行列表以及它之前的行?