xarray - Return 满足特定条件的数据,无需使用 for 循环
xarray - Return data that meets certain criteria without having to use for loop
我正在处理多维数据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 对象,该对象只有 return 数据,即 1
(0
可以分配为 NaN 或删除)。
我试图使用 sel
使用 FOR 循环打印出每个坐标的数据,但这非常慢。这可能需要很长时间。
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)
这将 return 一个新的 xarray,其中每个不是 1 的条目现在都是 NaN。
50x50x50 xarray 的时间比较:
for 循环:~56.9456s
where
: ~00.0020s
我正在处理多维数据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 对象,该对象只有 return 数据,即 1
(0
可以分配为 NaN 或删除)。
我试图使用 sel
使用 FOR 循环打印出每个坐标的数据,但这非常慢。这可能需要很长时间。
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)
这将 return 一个新的 xarray,其中每个不是 1 的条目现在都是 NaN。
50x50x50 xarray 的时间比较:
for 循环:~56.9456s
where
: ~00.0020s