MCPcopy
hub / github.com/pydata/xarray / _get_nan_block_lengths

Function _get_nan_block_lengths

xarray/core/missing.py:48–74  ·  view source on GitHub ↗

Return an object where each NaN element in 'obj' is replaced by the length of the gap the element is in.

(
    obj: Dataset | DataArray | Variable, dim: Hashable, index: Variable
)

Source from the content-addressed store, hash-verified

46
47
48def _get_nan_block_lengths(
49 obj: Dataset | DataArray | Variable, dim: Hashable, index: Variable
50):
51 """
52 Return an object where each NaN element in 'obj' is replaced by the
53 length of the gap the element is in.
54 """
55
56 # make variable so that we get broadcasting for free
57 index = Variable([dim], index)
58
59 # algorithm from https://github.com/pydata/xarray/pull/3302#discussion_r324707072
60 arange = ones_like(obj) * index
61 valid = obj.notnull()
62 valid_arange = arange.where(valid)
63 cumulative_nans = valid_arange.ffill(dim=dim).fillna(index[0])
64
65 nan_block_lengths = (
66 cumulative_nans.diff(dim=dim, label="upper")
67 .reindex({dim: obj[dim]})
68 .where(valid)
69 .bfill(dim=dim)
70 .where(~valid, 0)
71 .fillna(index[-1] - valid_arange.max(dim=[dim]))
72 )
73
74 return nan_block_lengths
75
76
77class BaseInterpolator:

Callers 2

interp_naFunction · 0.85

Calls 10

VariableClass · 0.90
ones_likeFunction · 0.90
notnullMethod · 0.45
whereMethod · 0.45
fillnaMethod · 0.45
ffillMethod · 0.45
bfillMethod · 0.45
reindexMethod · 0.45
diffMethod · 0.45
maxMethod · 0.45

Tested by 1

Used in the wild real call sites across dependent graphs

searching dependent graphs…