Python 更改维度的map_块返回索引器错误:元组索引超出范围
我正在尝试使用Python 更改维度的map_块返回索引器错误:元组索引超出范围,python,dask,Python,Dask,我正在尝试使用dask数组创建聚合统计信息映射块似乎很理想,但无法使其工作 我是新来的dask,所以我想了解它的工作方式。我计划使用自定义函数,并从一些基础知识开始。我陷入困境,经过几个小时的尝试和错误后,我看不到解决方案 import dask import dask.array as da from numpy import median,array def func(a): m = median(a) print(m) return array(m) x = d
dask
数组创建聚合统计信息<代码>映射块似乎很理想,但无法使其工作
我是新来的dask
,所以我想了解它的工作方式。我计划使用自定义函数,并从一些基础知识开始。我陷入困境,经过几个小时的尝试和错误后,我看不到解决方案
import dask
import dask.array as da
from numpy import median,array
def func(a):
m = median(a)
print(m)
return array(m)
x = da.random.random((10000, 10000), chunks=(5000, 5000))
x.map_blocks(func,chunks=(1,1)).compute()
我希望有一个新的数组,每个块都有结果,但得到:
nan
0.5001597269075302
0.49996143572562185
0.49994227403711916
0.5001512434686584
Traceback (most recent call last):
...
result.append(tuple([shape(deepfirst(a))[dim] for a in arrays]))
IndexError: tuple index out of range
map_块
一开始可能有点棘手。这里的问题是func
返回一个shape()
数组,而在map\u块中,您指示(1,1)
的输出块
如果我理解正确,您希望将x
的每个块替换为其中间值(这些将是大小为(1,1)
)的新块)。为此,需要输出具有该形状的数组。请参阅以下代码:
import dask
import dask.array as da
from numpy import median,array
def func(a):
m = median(a)
print(m)
return array(m)[None,None] # add dummy dimensions
# x = da.random.random((10000, 10000), chunks=(5000, 5000))
x = da.random.random((100, 100), chunks=(50, 50)) # try things out on small array
x.map_blocks(func,chunks=(1,1)).compute()
使用None
索引数组会向其添加虚拟维度。因此,数组(m)[None,None]
将具有所需的形状(1,1)
另外,在这些问题解决之前,处理小数据是有意义的,我在上面的示例中添加了小数据