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

如何用向量化方式处理含重复索引的NumPy数组修改?

解决NumPy重复索引累加问题及霍夫线变换累加器优化

简化场景:重复索引的正确累加

使用NumPy花式索引arr[idx] += 1时,由于操作基于数组副本修改后再赋值回原数组,重复索引的累加会失效——同一索引的多次操作仅生效一次。

正确的向量化实现

np.add.at是NumPy专为这类场景设计的原地原子操作,完美支持重复索引的累加需求:

一维数组示例

import numpy as np

arr = np.zeros(5)
idx = [0, 1, 1, 2, 0]
np.add.at(arr, idx, 1)
print(arr)  # 输出: array([2., 2., 1., 0., 0.])

重复单索引示例

arr = np.zeros(1)
idx = [0, 0]
np.add.at(arr, idx, 1)
print(arr)  # 输出: array([2.])

实际场景:霍夫线变换累加器优化

实现霍夫线变换时,无需将二维(r, θ)索引扁平化,直接用np.add.at即可高效完成累加器计数:

假设已为每个输入点计算出离散化索引:

  • r_indices:一维数组,存储每个点在r轴上的索引
  • theta_indices:一维数组,存储每个点在θ轴上的索引

初始化二维累加器后,执行以下代码即可完成所有点的累加:

# 假设r和θ的离散化数量分别为num_r和num_theta
accumulator = np.zeros((num_r, num_theta))
np.add.at(accumulator, (r_indices, theta_indices), 1)

这种方式避免了扁平化带来的额外数组操作开销,且np.add.at的性能远优于基于np.unique的分组计数方案,在处理大规模点集时优势尤为明显。

内容的提问来源于stack exchange,提问作者JS S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:11