按元素求和2d numpy数组

时间:2018-10-13 02:05:39

标签: python arrays numpy numpy-ndarray

我需要通过索引1,AKA(物种所在的区域)来总结一个numpy数组。原始数据在.csv文件中,但是我将其转换为numpy数组。剩下的就是弄清楚如何根据我的需要进行排序和汇总。一个简单的if语句会比numpy数组函数好吗?

数组看起来像这样(链接如下):

#(Species) (Region located) (# of individuals) <-- For your convenience

[['Purple Puffin' '1' '1']
['Wisteria Wombat' '3' '4']
['Pumpkin Pomeranian' '1' '3']
['Wisteria Wombat' '2' '3']
['Burgundy Bichon Frise' '2' '1']
['Purple Puffin' '1' '4']
['Wisteria Wombat' '2' '2']
['Pumpkin Pomeranian' '1' '2']]

但是整个阵列有更多数据,我可以将其链接进来。

我需要总结每个“地区”中的“个人人数”。 最终输出应在numpy数组中如下所示:

['Burgundy Bichon Frise' '1' '#']
['Pumpkin Pomeranian' '1' '#']
['Purple Puffin' '1' '#']
['Wisteria Wombat' '1' '#']

['Burgundy Bichon Frise' '2' '#']
['Pumpkin Pomeranian' '2' '#']
['Purple Puffin' '2' '#']
['Wisteria Wombat' '2' '#']

['Burgundy Bichon Frise' '3' '#']
['Pumpkin Pomeranian' '3' '#']
['Purple Puffin' '3' '#']
['Wisteria Wombat' '3' '#']

每个区域都被分为物种,每个物种的种群被加在一起。 这需要以一个numpy数组结束。

编辑   我按种类和地区对阵列进行了排序。现在,我只需要知道如何按每种物种在每个区域中添加“个体数”。

Link to full numpy data set

1 个答案:

答案 0 :(得分:0)

您可以使用np.uniquenp.bincount

>>> inp
array([['Purple Puffin', '1', '1'],
       ['Wisteria Wombat', '3', '4'],
       ['Pumpkin Pomeranian', '1', '3'],
       ['Wisteria Wombat', '2', '3'],
       ['Burgundy Bichon Frise', '2', '1'],
       ['Purple Puffin', '1', '4'],
       ['Wisteria Wombat', '2', '2'],
       ['Pumpkin Pomeranian', '1', '2']], dtype='<U21')
>>> unq, inv = np.unique(inp[:, 1::-1], axis=0, return_inverse=True)
>>> cnt = np.bincount(inv, inp[:, 2].astype(int)).astype(int)
>>> res = np.c_[unq[:, ::-1], cnt]
>>> res
array([['Pumpkin Pomeranian', '1', '5'],
       ['Purple Puffin', '1', '5'],
       ['Burgundy Bichon Frise', '2', '1'],
       ['Wisteria Wombat', '2', '5'],
       ['Wisteria Wombat', '3', '4']], dtype='<U21')