2024-04-20 08:32:02 发布
网友
我有一个numpy数组,比如
x = np.zeros(4, dtype=np.int)
我有一个类似[1, 2, 3, 2, 1]的索引列表,我想在相应的数组元素中添加1,这样对于索引列表中的每个元素,x在该位置递增:
[1, 2, 3, 2, 1]
x = [0, 2, 2, 1]
我尝试使用以下方法进行此操作:
x[indices] += 1
但由于某些原因,它只更新索引一次,如果索引出现的次数超过一次,则不会进行注册。我当然可以创建一个简单的for循环,但我想知道是否有一个单线解决方案
实际上,您要做的是用索引的频率替换索引
试试np.bincount。从技术上讲,这和你想做的是一样的
np.bincount
indices = [1, 2, 3, 2, 1] np.bincount(indices)
array([0, 2, 2, 1])
如果你想想你在做什么。你是说对于索引0,你不想计算任何东西。但是对于索引1,你需要2个计数。。等等希望这能给你一个直观的感觉,为什么这是相同的
@Stef使用np.unique的解决方案的作用与np.bincount完全相同
np.unique
您可以使用^{},将return_counts设置为True:
return_counts
True
idx, cnt = np.unique(indices, return_counts=True) x[idx] += cnt
您需要np.add.at:
np.add.at
np.add.at(x, indices, 1) x Out[]: array([0, 2, 2, 1])
即使x不是以np.zeros开头,这也是有效的
x
np.zeros
实际上,您要做的是用索引的频率替换索引
试试
np.bincount
。从技术上讲,这和你想做的是一样的如果你想想你在做什么。你是说对于索引0,你不想计算任何东西。但是对于索引1,你需要2个计数。。等等希望这能给你一个直观的感觉,为什么这是相同的
@Stef使用
np.unique
的解决方案的作用与np.bincount
完全相同您可以使用^{} ,将
return_counts
设置为True
:您需要
np.add.at
:即使
x
不是以np.zeros
开头,这也是有效的相关问题 更多 >
编程相关推荐