正确选择块 - dask数组的规范

ist*_*ern 7 python dask

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

  • 像1000这样的块大小
  • 像(1000,1000)这样的块状形状
  • 所有维度的所有块的显式大小,如((1000,1000,500),(400,400))

您的块输入将被标准化并以第三个和最明确的形式存储.

在尝试使用visualize()函数了解块的工作方式之后,仍然有一些我不确定的事情:

如果输入是标准化的,那么我选择哪种输入形式是否重要?

Blocksize意味着每个块的大小为X,即1000. blockshape输入指定了什么?

给出blockhape输入时,参数的顺序是否有所不同?它与阵列/矩阵的形状有什么关系?

MRo*_*lin 8

该列表中较低的表单更明确,允许块形状更大的不对称性.

例子

我们将通过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
Run Code Online (Sandbox Code Playgroud)

我们展示了不同的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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

讨论

用户很少在原始数据上提供后面的例子,但是由复杂的切片和广播操作引起.一般来说,我使用最简单的形式,直到我需要更复杂的形式.块的选择应与您想要的计算一致.

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