Python 将相关系数函数从NumPy转换为Dask

Python 将相关系数函数从NumPy转换为Dask,python,numpy,distributed,dask,Python,Numpy,Distributed,Dask,我试图通过将一个方法从(使用Spark)转换为等效的numpy版本来评估dask,但我不确定如何使用dask/distributed来编写这个方法 在thunder中,我可以拍摄一组图像,将其转换为一系列,并与某些信号关联: imgs = thunder.images.fromrandom((10, 900, 900)) series = imgs.toseries() signal = series[5, 5, :] correlated = series.correlate(signal)

我试图通过将一个方法从(使用Spark)转换为等效的numpy版本来评估dask,但我不确定如何使用dask/distributed来编写这个方法

在thunder中,我可以拍摄一组图像,将其转换为一系列,并与某些信号关联:

imgs = thunder.images.fromrandom((10, 900, 900))
series = imgs.toseries()
signal = series[5, 5, :]
correlated = series.correlate(signal)
numpy版本如下所示:

series = numpy.random.rand(900, 900, 10)
signal = series[5, 5, :]

reshaped = series.reshape(900 * 900, 10)

correlated = numpy.asarray(
    map(lambda x: numpy.corrcoef(x, signal)[0, 1], reshaped))
)
final = correlated.reshape(900, 900)

我正在寻找一些关于如何将其转换为分布式应用程序的技巧。

可能类似于以下内容

import dask.array as da
import numpy as np

imgs = da.random.random((10, 900, 900), chunks=(1, 900, 900))
reshaped = imgs.reshape((10, 900 * 900))
如果你想让你的图像相互关联

result = da.corrcoef(reshaped)
result.compute()
或者反对其他信号

signal = np.random.random(900 * 900)
result = reshaped.map_blocks(np.corrcoef, signal, dtype=signal.dtype)
result.compute()

但是,我对您的应用程序不是很熟悉,因此上面的响应可能有缺陷。

是的,谢谢,现在更容易看到这一点!但是,当我调用
result.compute()
,在线程模式下运行时,会得到一个
MemoryError
。我将尝试在另一个框中重现此操作,以确保正确。我不会对
da.corrcoef
案例中的内存错误感到惊讶(很难以低内存方式执行此操作)。我不希望在第二种情况下出现内存错误。如果你想溢出到磁盘,你可以试试分布式调度程序:我想我遇到了一个内存不足的错误,因为我唯一能找出如何将其分块的方法是通过900。您的示例翻转了维度…我需要从一组900x900的图像开始,然后翻转为大小为(900900,10)的时间序列。为了做到这一点,我从
imgs
开始使用
chunks=900
,所以我的
整形后的
最终得到了
chunksize=(810000,10)
。我只需要根据上面的最后一个块的信号进行关联,但我无法计算出正确的块大小。