Numpy基于索引在二维数组中组合值

时间:2018-05-07 10:43:17

标签: python numpy data-analysis

我有一个基于这种格式[[x,y],[x,y]...]的numpy数组,我希望将y的{​​{1}}值组合在一起

示例x

我希望这成为array = [[0,0],[1,1],[2,4],[4,6],[2,2],[3,7],[1,9],[4,16],[5,1],[5,2],[0,0]] - 不需要订购

好像现在我想不出简单有效地做到这一点的方法,可能有助于添加我的实际数组使用时间戳作为我的newArray = [[0,0],[1,10],[2,6],[3,7],[4,22],[5,3]]值,例如x并且是183083大小也不错。

任何有用的帮助!

3 个答案:

答案 0 :(得分:1)

如果性能有问题,可以使用纯numpy解决方案:Sum array by number in numpy

以下是使用collections.defaultdict的基于字典的方法。这通过迭代数组中的每一行并按键求和值来实现。

import numpy as np
from collections import defaultdict

A = np.array([[0,0],[1,1],[2,4],[4,6],[2,2],[3,7],[1,9],[4,16],[5,1],[5,2],[0,0]])

d = defaultdict(int)
for i, j in A:
    d[i] += j

res = np.array(sorted(d.items()))

print(res)

array([[ 0,  0],
       [ 1, 10],
       [ 2,  6],
       [ 3,  7],
       [ 4, 22],
       [ 5,  3]])

答案 1 :(得分:1)

以下是使用switch (state ) { case ("installing"): console.log("[PWA] Service Worker is installing..."); break; case ("installed"): console.log("[PWA] Service Worker Install successful"); break; case ("redundant"): console.log("[PWA] Service Worker Install failed"); break; case ("activated"): if (navigator.serviceWorker.controller) { break; } console.log('[PWA] Service Worker is offline') // Show an offline style // showOfflineToast(); break; }

的示例
collections.Counter

答案 2 :(得分:0)

这是典型的分组操作。 numoy不支持这些开箱即用,但numpy-indexed包确实(免责声明:我是它的作者):

import numpy_indexed as npi
keys, sums = npi.group_by(A[:, 0]).sum(A[:, 1])

此解决方案以完全矢量化的方式工作;所以没有for python中的数组循环,也推广到很多其他场景。它可以使用pip或conda安装。