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

无需迭代通过索引对更新2D numpy数组的实现方法

问题:NumPy无循环批量给2D数组指定索引位置赋值

可复现环境

我有一个包含n对索引的数组:

indexarray=\
np.array([[0,2,4,6],
          [1,3,5,7]])

同时有一个2D数组:

zeros = np.zeros((10,9))

以及长度为n的数值列表:

values = [1,2,3,4]

我需要将values列表的第k个元素赋值给zeros数组中索引为第k组索引对的位置。

现有解决方案

# 可运行,但for循环不适合实际生产场景
for index, (row, col) in enumerate(indexarray.T):
    zeros[row, col] = values[index]

运行后可视化结果如下:

plt.imshow(zeros)

结果可视化
结果符合预期,但使用了迭代循环。
请问如何不使用迭代实现该需求?

相似但不同的问题

  • Index 2D numpy array by a 2D array of indices without loops:该问题输出为索引对数组,而非本场景需要的2D数组。
  • Fill 2D numpy array from three 1D numpy arrays:该场景更复杂,是从1D数组生成2D数组,与本场景已有2D数组的前提不同。
  • numpy arrays: filling and extracting data quickly:场景复杂度更高,并非基于已有2D数组操作。
  • How to convert List of Lists of Tuples- pairs (index,value) into 2D numpy array:目标不同,且未避免使用循环。

解答

直接使用NumPy原生的高级索引特性即可实现无循环批量赋值,代码如下:

zeros[indexarray[0], indexarray[1]] = values

实现原理

NumPy支持传入两个等长的一维数组分别作为行、列索引,一次性选中多个离散位置的元素进行批量操作,所有运算都在C层级执行,相比Python层的for循环性能提升非常明显,完全满足生产环境的性能要求。
执行后得到的结果和原有循环实现完全一致,可直接用原有可视化代码验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:27:04