Dask.array转换逐点数组操作

时间:2018-03-04 15:05:01

标签: python arrays numpy dask

" daskify"是否可行?根据一般numpy操作编写的逐点函数?

案例+部分解决方案:
例如,请参见此处:https://github.com/SciTools/iris/pull/2964

关键是我们要从另一个库中应用通用数组操作,但它只能在实际的numpy数组上运行。
而我们希望它在此操作中对现有的dask数组进行操作,并产生一个惰性结果,以便有效地计算子数组。
这就是为什么它使用da.from_array ...

替代品:
您可以改为使用延迟,但如果这样做,则必须每次都评估整个参数,即使结果是子索引的。

或者你可以使用frompyfunc http://dask.pydata.org/en/latest/array-api.html#dask.array.frompyfunc
但是它使用标量函数,而不是数组函数 这是低效的,特别是当它返回一个对象数组而不是数字时。

剩余问题:
在上面的部分解决方案中,缺失的部分是能够通过"透视"不透明的点计算包装器,因此它的dask参数对整个图形是可见的 ?也许在Dask中有一种方法可以公开当前隐藏在dask_array构造中的from_array(ArraylikeWrapper(dask_array))参数?

1 个答案:

答案 0 :(得分:1)

您是否尝试过da.map_blocks

x = x.map_blocks(func)

如果你能够创建那些,那么Dask还支持使用__array_ufunc__协议的NumPy ufuncs(尽管map_blocks可能更容易)。