根据 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/