根据一般的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))
论证?
你试过da.map_blocks吗?
x = x.map_blocks(func)
如果你能够创建那些(尽管__array_ufunc__
可能更容易),Dask还支持使用map_blocks
协议的NumPy ufuncs。