首页 > 解决方案 > 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 1v 2相乘)。是否有这样做的数组/numpy 方式?

标签: pythonnumpyslice

解决方案


试试这个:

[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>


推荐阅读