python - Numpy间接索引
问题描述
我正在尝试通过使用另一个包含索引的数组对一个或多个数组执行聚合函数。这些索引可能包含需要根据聚合函数处理的重复项(我对执行此“间接索引”的一般方法感兴趣,所以我希望我不需要区分聚合函数)。
例如,假设我们想通过ix中的索引从v中的元素获得总和w。
ix = [ 0, 7, 0, 1, 7, 3, 0, 2, 2, 5, 6, 4]
v = [100, 200, 300, 400, 500, 600, 700, 800, 900, 0, 0, 0]
=>
# 0 1 2 3 4 5 6 7
w = [1100 (100+300+700), 400, 1700 (800+900), 600, 0, 0, 0, 700 (200+500)]
sum
可能是一个简单的问题,但例如加权平均会比较棘手(在折叠成w之前将v 1和v 2相乘)。是否有这样做的数组/numpy 方式?
解决方案
试试这个:
[np.sum(v[ix == [x]]) for x in range(ix.max() + 1)]
结果:
[1100 400 1700 600 0 0 0 700]
<script type="text/javascript" src="//cdn.datacamp.com/dcl-react.js.gz"></script>
<div data-datacamp-exercise data-lang="python">
<code data-type="sample-code">
import numpy as np
ix = np.array([0, 7, 0, 1, 7, 3, 0, 2, 2, 5, 6, 4])
v = np.array([100, 200, 300, 400, 500, 600, 700, 800, 900, 0, 0, 0])
print([np.sum(v[ix == [x]]) for x in range(ix.max() + 1)])
</code>
</div>
推荐阅读
- postgresql - 仅使用默认值将行插入到 Postgresql 表中
- python - 删除最后一层,在 Keras 中插入三个 Conv2D 层
- c# - 单步执行引用解决方案中的代码
- google-cloud-pubsub - 谷歌云部署管理器无法使用“logging.v2.sink”创建部署,权限被拒绝
- c# - 如何在 C# 中动态追加字符串?
- javascript - 我不明白为什么我的代码不起作用,有人可以检查一下吗?我很新 (JavaScript)
- javascript - 允许在 Chrome 中的 dragenter 事件处理程序上访问拖动的项目数据
- c# - 使用 C# 的 MacOs 活动窗口标题
- python - 基于时间戳的 Python pandas 查找值
- go - 谁能解释 Go Tour 网站上的 compute(fn func()) 代码?