我需要将{'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的情况下如何做到这一点?
思路:
我试过Bag - >延迟 - >数组,但由于数组形状有问题,它无法正常工作。
一个选项可能是将Bag作为文本文件转储到磁盘上,然后将其作为dask.DataFrame / Array读取。示例:b_dict.map(json.dumps).to_textfiles("/path/to/data/*.json")
我没有一袋口袋,而是每袋2袋np.array然后尝试Bag - >延迟 - >阵列
还有其他想法吗?
答案 0 :(得分:0)
我建议采取以下步骤:
images
和labels
值).map_partitions(np.stack)
或.map_partitions(np.concatenate)
(取决于您关注的形状)将每个分区转换为单个numpy数组.to_delayed
dask.array.from_delayed
将每个延迟对象转换为dask.arrays
da.stack
或da.concatenate