python - 按元素对 2d numpy 数组求和
问题描述
我需要通过索引 1 总结一个 numpy 数组,也就是 Species 所在的区域。原始数据位于 .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 数组结束。
编辑 我得到了按物种和地区排序的数组。现在我只需要知道如何按每个物种将每个区域的“个体数量”相加。
解决方案
您可以使用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')
推荐阅读
- visual-studio-code - Vim VS Code Extension: How to remap "i" in normal mode to Escape key?
- statistics - 面板数据随机效应回归模型中的 Beta 系数
- c - “\e”是做什么的?"\e[1;1H\e[2J" 有什么作用?
- ios - SwiftUI 内容视图随机填充
- python - 在 python 中使用 SMTP_SSL 发送邮件
- android - Compose Runtime 找不到我的自定义主题
- typescript - 如何扩展 dom 节点类型以具有属性
- email - 我在 ubuntu 20.04 上使用 postfix 和 dovecot 创建了一个邮件服务器,但我的邮件进入了垃圾邮件
- node.js - 在 nodejs monorepo 包中将包子文件夹公开为根
- python - 为什么我的 RMSE 不受数据标准化 (0 - 1) 的影响?