具有重影的单个 dask 阵列边界
Individual dask array boundaries with ghosting
我正在玩 Dask 尝试使用有限差分设置一些简单的 PDE 求解,我想知道是否有一种方法可以指定每个边界的边界条件。
文档here
当前的 ghost.ghost
函数允许指定一些不同的 B.C.s 但它们对于 y 边界和 x 边界总是相同的。
文档提到我可以任意填充边界,我很乐意这样做,但是有没有办法让 ghost.ghost
告诉 不 添加区块外有边界吗?
ghost_internal
看来目前 无法通过面向用户的 ghost
或 map_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
以 trim 去除具有相同轴深度的多余重叠。
但更一般地说,这应该可以通过更方便的 ghost
和 map_overlap
函数访问。我可以请你raise an issue吗?
有限差分
更普遍的是有限差分的应用。 Dask.arrays 在这里有些限制,因为他们拒绝改变现有数据。这导致许多副本 运行 比简单的有限差分方案慢一点。对于更昂贵的计算,复制的成本会不那么痛苦。这是演示这种减速的快速 notebook。自创建该笔记本以来,复制开销减少了两倍,但仍然很重要。
我正在玩 Dask 尝试使用有限差分设置一些简单的 PDE 求解,我想知道是否有一种方法可以指定每个边界的边界条件。
文档here
当前的 ghost.ghost
函数允许指定一些不同的 B.C.s 但它们对于 y 边界和 x 边界总是相同的。
文档提到我可以任意填充边界,我很乐意这样做,但是有没有办法让 ghost.ghost
告诉 不 添加区块外有边界吗?
ghost_internal
看来目前 无法通过面向用户的 ghost
或 map_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
以 trim 去除具有相同轴深度的多余重叠。
但更一般地说,这应该可以通过更方便的 ghost
和 map_overlap
函数访问。我可以请你raise an issue吗?
有限差分
更普遍的是有限差分的应用。 Dask.arrays 在这里有些限制,因为他们拒绝改变现有数据。这导致许多副本 运行 比简单的有限差分方案慢一点。对于更昂贵的计算,复制的成本会不那么痛苦。这是演示这种减速的快速 notebook。自创建该笔记本以来,复制开销减少了两倍,但仍然很重要。