【发布时间】:2020-02-23 02:19:26
【问题描述】:
我有一本字典,其中有大量的键(~300k 并且还在增长),并且作为值,它的集合也有大量的项目(~20k强>)。
dictionary = {
1: {1, 2, 3},
2: {3, 4},
3: {5, 6},
4: {1, 5, 12, 13},
5: set()
}
我想要实现的是创建两个数组:
keys = [1 1 1 2 2 3 3 4 4 4 4]
items = [1 2 3 3 4 5 6 1 5 12 13]
这基本上代表了每个集合中每个项目及其对应键的映射。
我尝试使用 numpy 完成这项工作,但仍然需要很长时间,我想知道它是否可以优化。
numpy 代码:
keys = np.concatenate(list(map(lambda x: np.repeat(x[0], len(x[1])), dictionary.items())))
items = np.concatenate(list(map(lambda x: list(x), dictionary.values())))
keys = np.array(keys, dtype=np.uint32)
items = np.array(items, dtype=np.uint16)
return keys, items
第二部分是尝试减少这些变量的内存占用以考虑它们各自的数据类型。但我知道它们在前两个操作中仍将默认为 64 位变量(在应用 dtype 更改之前),因此内存将被分配,我可能会用完 RAM。
【问题讨论】:
标签: python numpy optimization out-of-memory large-data