python - 从 dask.Series 列表高效创建 dask.array

标签 python numpy dask dask-delayed

从 dask.Series 列表创建 dask.array 最有效的方法是什么? 该系列由500万个列表300个元素组成。 目前分为500个分区。 目前我正在尝试:

pt = [delayed(np.array)(y)
      for y in
      [delayed(list)(x)
       for x in series.to_delayed()]]
da = delayed(dask.array.concatenate)(pt, axis=1)
da = dask.array.from_delayed(da, (vec.size.compute(), 300), dtype=float)

想法是将每个分区转换为 numpy 数组并拼接 它们一起形成一个dask.array。 不过,这段代码需要永远运行。 只要有足够的 RAM,就可以从这些数据中快速地按顺序构建 numpy 数组。

最佳答案

我认为您使用 dask.delayed 的做法是正确的。然而,在该系列上调用 list 可能并不理想。我将创建一个函数,将您的系列之一转换为 numpy 数组,然后进行延迟处理。

def convert_series_to_array(pandas_series):  # make this as fast as you can
    ...
    return numpy_array

L = dask_series.to_delayed()
L = [delayed(convert_series_to_array)(x) for x in L]
arrays = [da.from_delayed(x, shape=(np.nan, 300), dtype=...) for x in L]
x = da.concatenate(arrays, axis=0)

另外,关于这一行:

da = delayed(dask.array.concatenate)(pt, axis=1)

您永远不应该在 dask 函数上调用延迟。他们已经很懒了。

关于python - 从 dask.Series 列表高效创建 dask.array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47975155/

相关文章:

python - Pillow 和 Numpy,获取像素值

python - 理解 Dask 分布式的内存行为

python - 向 dask 数据帧添加新列会引发 ValueError : Length of values does not match length of index

dask - Dask 如何处理函数定义中的外部或全局变量?

Python - Beautiful Soup,如何获取标签的第一个值

python - 将 mp3 文件格式化为用于 CNN 机器学习的频谱图

python - 对特定按钮视觉效果进行故障排除 : How to Modify Individual Buttons Using CSS in Taipy

python - Pandas 时间序列与缺失数据/​​记录的比较

python - 如何使用 numpy.frompyfunc 返回元素数组而不是数组数组?

python - 将 (r x c) 数组大小调整为 (r*2 x c-1)