从 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/