【发布时间】:2019-01-17 08:36:45
【问题描述】:
我有一个函数,它接受多个二维数组并创建两个具有相同形状的新数组。它最初被编写为仅支持 numpy 数组,但如果看到“块”属性,则被“破解”以支持 dask 数组。一位使用 xarray DataArrays 的用户指出,此函数现在返回 dask 数组,因为 DataArray 具有“块”属性。
我想知道 dask/xarray 专家是否可以告诉我支持所有 3(4 个?)对象类型的最简洁方法可能是无需为每种类型(numpy 数组、dask 数组、带有 numpy 的 xarray , xarray 与 dask)。请记住,输入是二维数组,因此不支持开箱即用的屏蔽操作。修复此问题的相关拉取请求是 here。这是我们目前在尝试避免添加 xarray 和 dask 作为所需依赖项时所做的:
if hasattr(az_, 'chunks') and not hasattr(az_, 'loc'):
# dask array, but not xarray
import dask.array as da
az_ = da.where(top_s > 0, az_ + np.pi, az_)
az_ = da.where(az_ < 0, az_ + 2 * np.pi, az_)
elif hasattr(az_, 'loc'):
# xarray
az_.data[top_s > 0] += np.pi
az_.data[az_.data < 0] += 2 * np.pi
else:
az_[top_s > 0] += np.pi
az_[az_ < 0] += 2 * np.pi
编辑: 是否存在 xarray 对象的半唯一属性?
【问题讨论】:
-
为什么要通过属性来区分?这有点危险,因为 numpy.array 的子类可能具有
chunks属性。我认为isinstance(az_, dask.array.Array)更直接。 -
好的。您可能希望避免不必要的依赖。尝试:
标签: python numpy dask python-xarray