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

NumPy中如何无循环实现花式索引式的元素累加操作?

无循环实现目标功能

你可以直接利用NumPy的高级索引特性来实现,不需要循环,也不用np.put_along_axis。因为ix、iy、times这三个数组的长度一致,刚好可以一一对应定位到src中的目标位置,直接对这些位置累加values即可:

import numpy as np

src = np.zeros((5,5,10), dtype=np.float64)

ix = np.array([4, 0, 0])
iy = np.array([1, 3, 4])
times = np.array([1 ,2, 4])
values = np.array([25., 10., -65.])

# 无循环实现
src[ix, iy, times] += values

原理说明

当你用三个长度相同的一维数组作为多维数组的索引时,NumPy会将它们对应位置的元素组合成一个个坐标:

  • 第一个目标位置:(ix[0], iy[0], times[0]) = (4,1,1),累加values[0]=25.
  • 第二个目标位置:(ix[1], iy[1], times[1]) = (0,3,2),累加values[1]=10.
  • 第三个目标位置:(ix[2], iy[2], times[2]) = (0,4,4),累加values[2]=-65.

这和你原来的循环逻辑完全一致,但效率更高,是NumPy原生的向量化操作。

内容的提问来源于stack exchange,提问作者Antoine Collet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:15:41