gpt4 book ai didi

python - Dask Bag of dicts 到 Dask 数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:52 28 4
gpt4 key购买 nike

我需要将 {'imgs': np.array(img_list), 'lables': np.array(label_list)} 的 dask.Bag 转换成两个单独的 dask.Array-s .为什么我创建 Bag 而不是直接去 Array?因为我通过 map() 多次处理那个 Bag;没能对 Array 做同样的事情。

现在,以下代码适用于小型数据集,但显然不适用于更大的数据。

images_array = da.from_array(np.array([item['images'] for item in imgs_labels_bag]), chunks=chunksize)
labels_array = da.from_array(np.array([item['labels'] for item in imgs_labels_bag]), chunks=chunksize)

如何在不将 objs 转换为 numpy 的情况下做到这一点?

想法:

  1. 我试过 Bag -> Delayed -> Array 但它没有成功,因为数组形状有问题。

  2. 一个选项可能是将 Bag 作为文本文件转储到磁盘上,然后将其作为 dask.DataFrame/Array 读取。示例:b_dict.map(json.dumps).to_textfiles("/path/to/data/*.json")

  3. 我可以各有 2 袋 np.array,然后尝试 Bag -> Delayed -> Array,而不是一袋字典。

还有其他想法吗?

最佳答案

如果 item['images'] 是一维 numpy 数组,并且您想按以下方式平铺它们:

+---------------+
|item0['images']|
+---------------+
|item1['images']|
+---------------+
|item2['images']|
+---------------+

然后这可以工作(doc):

import dask.bag as db
import numpy as np
import dask.array as da
b = db.from_sequence([{'img':np.arange(10)}]*4)
s = da.stack([item['img'] for item in b], axis=0)
print(s.compute())

结果:

[[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 7 8 9]
[0 1 2 3 4 5 6 7 8 9]]

关于python - Dask Bag of dicts 到 Dask 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47542788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com