python - 使用重复索引递增 Numpy 数组

标签 python indexing numpy

我有一个 Numpy 数组和一个索引列表,我想将其值递增 1。该列表可能包含重复索引,我希望增量与每个索引的重复次数成比例。没有重复,命令很简单:

a=np.zeros(6).astype('int')
b=[3,2,5]
a[b]+=1

通过重复,我想出了以下方法。

b=[3,2,5,2]                     # indices to increment by one each replicate
bbins=np.bincount(b)
b.sort()                        # sort b because bincount is sorted
incr=bbins[np.nonzero(bbins)]   # create increment array
bu=np.unique(b)                 # sorted, unique indices (len(bu)=len(incr))
a[bu]+=incr

这是最好的方法吗?假设 np.bincountnp.unique 操作会产生相同的排序顺序是否存在风险?我是否缺少一些简单的 Numpy 操作来解决这个问题?

最佳答案

在numpy >= 1.8中,还可以使用at方法添加'通用函数'('ufunc')。作为docs note :

For addition ufunc, this method is equivalent to a[indices] += b, except that results are accumulated for elements that are indexed more than once.

以你的例子为例:

a = np.zeros(6).astype('int')
b = [3, 2, 5, 2]

……然后……

np.add.at(a, b, 1)

...将 a 保留为...

array([0, 0, 2, 1, 0, 1])

关于python - 使用重复索引递增 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004364/

相关文章:

Python win32com 工作簿.SaveAs 'Invalid number of parameters.' 错误

python - 我无法读取文件,因为我收到 "UnicodeDecodeError: ' utf- 8' codec can' t 解码“错误

python - 如何同时运行两个线程?

database - 递增列是否会使列上的 b 树索引不平衡?

python - 组合不同图像的 block 并产生新图像

python-2.7 - 使用 numpy.histogram2d 和 matplotlib 绘制二维直方图时遇到问题

Python PIL 找不到我的 "libjpeg"

javascript - Angular/TypeScript Map 在每个对象上使用最后一个索引

mysql - 我应该在此查询中使用哪些 mysql 索引?

Python3 将数组从 (x,y,3) 减少到 (x,y,1) (RGB 到灰度)