按元素求和 2d numpy 数组
Sum 2d numpy array by element
我需要通过索引 1 总结一个 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']]
但整个数组有更多数据,我可以 link 将其输入。
我需要总结每个 "Region" 中的“个人数量”。
最终输出在 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 数组中结束。
编辑
我得到了按物种和地区排序的数组。现在我只需要知道如何将每个物种在每个区域的“个体数”相加。
您可以使用 np.unique
和 np.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')
我需要通过索引 1 总结一个 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']]
但整个数组有更多数据,我可以 link 将其输入。
我需要总结每个 "Region" 中的“个人数量”。 最终输出在 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 数组中结束。
编辑 我得到了按物种和地区排序的数组。现在我只需要知道如何将每个物种在每个区域的“个体数”相加。
您可以使用 np.unique
和 np.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')