You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy数组切片无法对重复索引元素重复执行算术操作的解决方案咨询

解决Numpy重复索引累加问题

Numpy普通索引的+=操作会合并重复索引,所以重复坐标只会加一次——这是因为它先提取所有目标元素的副本,修改后再赋值回去,重复索引对应的元素只会被处理一次。

要高效处理重复索引的累加,直接用Numpy内置的np.add.at函数,它会对每个索引位置逐个执行累加操作,重复索引会多次生效,完全不需要手动遍历。

二维坐标示例

import numpy as np

# 包含重复坐标的列表
coords = np.array([[0, 0], [1, 2], [0, 0], [3, 1]])
# 初始化map数组
map_arr = np.zeros((4, 3), dtype=int)

# 执行累加操作
np.add.at(map_arr, tuple(coords.T), 10)

print(map_arr)
# 输出结果:
# [[20  0  0]
#  [ 0  0 10]
#  [ 0  0  0]
#  [ 0 10  0]]

一维坐标示例

import numpy as np

coords = np.array([2, 5, 2, 2])
map_arr = np.zeros(10, dtype=int)

np.add.at(map_arr, coords, 10)

print(map_arr[2])  # 输出30,对应3次累加10
print(map_arr[5])  # 输出10

对比普通+=的问题:如果用map_arr[tuple(coords.T)] += 10,二维示例里map_arr[0,0]只会是10,因为重复索引被合并处理了。而np.add.at完美解决了这个问题,且效率和Numpy原生操作一致,远高于Python循环遍历。

内容的提问来源于stack exchange,提问作者imad.nyc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:37:38