从索引列表向numpy数组添加1?

2024-04-20 08:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组,比如

x = np.zeros(4, dtype=np.int)

我有一个类似[1, 2, 3, 2, 1]的索引列表,我想在相应的数组元素中添加1,这样对于索引列表中的每个元素,x在该位置递增:

x = [0, 2, 2, 1]

我尝试使用以下方法进行此操作:

x[indices] += 1

但由于某些原因,它只更新索引一次,如果索引出现的次数超过一次,则不会进行注册。我当然可以创建一个简单的for循环,但我想知道是否有一个单线解决方案


Tags: 方法numpy元素列表fornpzeros原因
3条回答

实际上,您要做的是用索引的频率替换索引

试试np.bincount。从技术上讲,这和你想做的是一样的

indices = [1, 2, 3, 2, 1]

np.bincount(indices)
array([0, 2, 2, 1])

如果你想想你在做什么。你是说对于索引0,你不想计算任何东西。但是对于索引1,你需要2个计数。。等等希望这能给你一个直观的感觉,为什么这是相同的

@Stef使用np.unique的解决方案的作用与np.bincount完全相同

您可以使用^{},将return_counts设置为True

idx, cnt = np.unique(indices, return_counts=True)
x[idx] += cnt

您需要np.add.at

np.add.at(x, indices, 1)
x
Out[]:
array([0, 2, 2, 1])

即使x不是以np.zeros开头,这也是有效的

相关问题 更多 >