根据 dask documentaion 可以通过以下三种方式之一指定块:

在尝试使用 visual() 函数了解块的工作方式后,仍有一些我不确定的事情:
如果输入是规范化的,我选择哪种输入形式有关系吗?
块大小 表示每个块的大小为 X,即 1000。 块形状 输入指定什么?
当给出 blockshape 输入时,参数的顺序是否有所不同?它与数组/矩阵的形状有什么关系?

最佳答案

该列表中较低的形式更加明确,并允许您的块形状具有更大的不对称性。

例子

我们将通过以下数组上的一系列chunks示例来讨论此问题:

1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 0 1 2 3 4
5 6 7 8 9 0
1 2 3 4 5 6

我们展示了不同的 chunks 参数如何将数组拆分为不同的块
chunks=3
大小为 3 的对称块
1 2 3  4 5 6
7 8 9  0 1 2
3 4 5  6 7 8

9 0 1  2 3 4
5 6 7  8 9 0
1 2 3  4 5 6
chunks=2
大小为 2 的对称块
1 2  3 4  5 6
7 8  9 0  1 2

3 4  5 6  7 8
9 0  1 2  3 4

5 6  7 8  9 0
1 2  3 4  5 6
chunks=(3, 2)
大小不对称但重复的块 (3, 2)
1 2  3 4  5 6
7 8  9 0  1 2
3 4  5 6  7 8

9 0  1 2  3 4
5 6  7 8  9 0
1 2  3 4  5 6
chunks=(1, 6)
大小不对称但重复的块 (1, 6)
1 2 3 4 5 6

7 8 9 0 1 2

3 4 5 6 7 8

9 0 1 2 3 4

5 6 7 8 9 0

1 2 3 4 5 6
chunks=((2, 4), (3, 3))
不对称和非重复块
1 2 3  4 5 6
7 8 9  0 1 2

3 4 5  6 7 8
9 0 1  2 3 4
5 6 7  8 9 0
1 2 3  4 5 6
chunks=((2, 2, 1, 1), (3, 2, 1))
不对称和非重复块
1 2 3  4 5  6
7 8 9  0 1  2

3 4 5  6 7  8
9 0 1  2 3  4

5 6 7  8 9  0

1 2 3  4 5  6

讨论

后面的例子很少由用户提供原始数据,而是由复杂的切片和广播操作引起的。通常我使用最简单的形式,直到我需要更复杂的形式。块的选择应与您想要进行的计算保持一致。

例如,如果您计划沿第一个维度取出薄片,那么您可能希望使该维度比其他维度更薄。如果您打算进行线性代数,那么您可能需要更多对称块。

关于python - 正确选择 dask 数组的块规范,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34895846/

10-09 18:56