Numpy Unique 在大型阵列上速度很慢...有什么方法可以加快速度吗?

Numpy Unique slow on a large array... is there any way to speed it up?

提问人:lara_toff 提问时间:9/10/2020 最后编辑:Augustinlara_toff 更新时间:11/17/2022 访问量:486

问:

我使用以下代码加载一个 numpy 数组,在第一列中查找唯一日期,然后根据日期从 numpy 数组中提取一个切片。它非常慢。有什么方法可以加快速度吗?也许如果我对第一列上的大数组进行排序?

db = np.load('/content/drive/My Drive/Share/Daily Data/Database/db_unranked.npy', 
             mmap_mode='r', allow_pickle=True)
dates = np.unique(db[:, 0])
data = db[db[:, 0] == dates[0]]

db_unranked.npy arary 为 21GB,约 800 万行和 345 列。np.unique 需要 10 多分钟,我已经等了 30 分钟,但它仍然没有完成。我正在使用 Google Colab。

python numpy 排序 唯一 切片

评论

0赞 juanpa.arrivillaga 9/10/2020
您的系统有多少可用内存?
0赞 juanpa.arrivillaga 9/10/2020
无论如何,你有没有考虑过改变你的方法。例如,使用具有适当索引的实际数据库?
0赞 lara_toff 9/10/2020
35GB 内存。不。。。我使用了 np.load 和 mmap_mode = r。这不是一个合适的数据库吗?你建议什么图书馆?我试过 dask,但无法让它工作......
0赞 juanpa.arrivillaga 9/10/2020
好的,如果您有 35 GB 的 RAM,那么当您这样做时,您的 RAM 可能会用完,这就是它如此缓慢的原因。无论如何,不,这根本不是一个合适的数据库......这是一个巨大的阵列。我的意思是像 postgres、myseql 等,但 dask 可能是合适的。data = db[db[:,0]==dates[0]]
1赞 Ethan 9/10/2020
@lara_toff 您可以控制写入原始 db_unranked.npy 文件吗?如果是这样,您可以为每个日期编写一个文件,而不是写入单个 21GB 的 .npy 文件。然后,您可以遍历文件夹中的所有 npy 文件。

答: 暂无答案