假设我有一个类似的数组:
arr = np.array([[1,20,5],
[1,20,8],
[3,10,4],
[2,30,6],
[3,10,5]])
并且我想为与第一列中的每个值匹配的每一行形成第三列之和的字典,即return {1: 13, 2: 6, 3: 9}
。为了使事情更具挑战性,我的数组中有10亿行,第一列中有10万个唯一元素。
接近1:天真,我可以调用np.unique()
用的组合独特的阵列中的每个项目然后迭代np.where()
和np.sum()
在一衬垫包围字典列表解析。如果我有少量的唯一元素,这会相当快,但是如果有100k个唯一元素,我将招致很多浪费的页面获取,从而导致整个数组进行100k I / O传递。
方法2:我也可以对最后一列进行一次I / O操作(因为必须在每一行中对列1进行散列操作可能比进行过多的页面获取便宜),但是我在这里失去了numpy的C内部循环矢量化的优势。
是否有一种无需使用纯Python循环即可实现方法2的快速方法?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句