如何在Numpy中实现基于索引的带重复次数累加操作?
numpy重复索引累加实现方法
先看你的问题场景:
import numpy as np nparr = np.array([10,20,30,40,50]) nparr[[1,3,3,4]] += 1 print(nparr) # 输出:array([10, 21, 30, 41, 51])
这里索引3出现两次但只加了1,是因为numpy花式索引执行+=时,会先提取对应元素的副本,修改后再赋值回去,重复索引的修改会被覆盖,只生效一次。
要实现按索引重复次数累加,有两种常用方法:
方法一:使用np.add.at()
这是numpy专门处理重复索引原地累加的方法,直接对原数组操作,会按索引出现次数累加对应值:
import numpy as np nparr = np.array([10,20,30,40,50]) np.add.at(nparr, [1,3,3,4], 1) print(nparr) # 输出:array([10, 21, 30, 42, 51])
方法二:用np.bincount()计算增量后累加
先统计每个索引的出现次数作为增量,再加到原数组上:
import numpy as np nparr = np.array([10,20,30,40,50]) indices = [1,3,3,4] # 计算每个索引的增量,minlength保证和原数组长度一致 increments = np.bincount(indices, minlength=len(nparr)) nparr += increments print(nparr) # 输出:array([10, 21, 30, 42, 51])
内容的提问来源于stack exchange,提问作者aellab
相关产品推荐
相关产品推荐

