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

如何用Numpy实现从三个向量构建2D数组并累加重复索引值?

解决Numpy重复索引位置值累加的问题

直接使用A[X,Y] += Z无法实现重复索引的累加效果,原因是Numpy的花式索引会先提取所有索引对应的元素生成临时数组,完成加法操作后再将结果赋值回原数组——重复索引的位置只会保留最后一次赋值的结果,而非逐步累加。

以下是两种Numpy原生高效解决方案:

方法一:使用np.add.at()

这是Numpy专门针对原地累加重复索引设计的函数,直接操作原数组,不会产生临时数组,性能接近原生C实现。

import numpy as np

X = [0,1,1]
Y = [2,2,2]
Z = [1,2,3]

A = np.zeros([3, 3], dtype=int8)
np.add.at(A, (X, Y), Z)

print(A)

输出结果:

array([[0, 0, 1],
       [0, 0, 5],
       [0, 0, 0]], dtype=int8)

方法二:使用np.bincount()

将二维索引转换为一维扁平索引后,用bincount统计每个索引位置的累加值,最后重塑为二维数组。该方法适合数据量较大的场景,性能表现优异。

import numpy as np

X = [0,1,1]
Y = [2,2,2]
Z = [1,2,3]

# 把二维索引转换为一维扁平索引
flat_indices = np.ravel_multi_index((X, Y), (3, 3))
# 计算每个索引位置的累加值
counts = np.bincount(flat_indices, weights=Z, minlength=3*3)
# 重塑为目标二维数组
A = counts.reshape(3, 3).astype(int8)

print(A)

输出结果:

array([[0, 0, 1],
       [0, 0, 5],
       [0, 0, 0]], dtype=int8)

内容的提问来源于stack exchange,提问作者Erasmo Calzadilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:16