具有重影的单个dask数组边界

时间:2015-07-24 17:53:01

标签: dask

我正在玩 Dask 尝试使用有限差异设置一些简单的PDE解决方案,我想知道是否有方法指定边界条件 - 边界。

文档here

当前ghost.ghost函数允许指定几个不同的B.C.s但它们对于y边界和两个x边界始终相同。

文档提到我可以任意填写边界,我很乐意这样做,但是有一种方法可以告诉ghost.ghost 添加任何边界大块的外面?

1 个答案:

答案 0 :(得分:1)

ghost_internal

目前似乎不是从面向用户的ghostmap_overlap函数执行此操作的方法。但是,您可以使用dask.array.ghost.ghost_internal函数来完成内部重影,而无需指定外部边界(这是ghost使用的主要函数)。

In [1]: import dask.array as da

In [2]: x = da.arange(10, chunks=5)

In [3]: x.chunks
Out[3]: ((5, 5),)

In [4]: y = da.ghost.ghost_internal(x, {0: 2})

In [5]: y.chunks
Out[5]: ((7, 7),)

In [6]: y.compute()
Out[6]: array([0, 1, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 8, 9])

您可能希望这样做,然后在较大的块上调用map_blocks,然后调用dask.array.ghost.trim_internal以使用相同的轴深度修剪多余的重叠。

但更常见的是,应该可以从更方便的ghostmap_overlap函数访问它。我可以问你raise an issue吗?

有限差异

更普遍地应用有限差分。 Dask.arrays在这里有些限制,因为它们拒绝改变现有数据。这导致许多副本比简单的有限差分方案运行得慢一些。对于更昂贵的计算,复制的成本将更少痛苦。这是一个快速notebook,可以证明这种放缓。自从创建该笔记本以来,复制开销减少了两倍,但仍然很重要。