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

如何用向量化方式基于另一数组修改NumPy数组的值?

如何用向量化方式替代循环设置NumPy数组的特定位置值?

当然有啦!NumPy本身就提供了非常高效的**高级索引(Fancy Indexing)**特性,完美替代你写的循环逻辑,而且速度快得多,代码也更简洁。

直接看改造后的代码:

import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pos = np.array([[1, 2], [2, 0]])

# 把pos拆成行索引和列索引的一维数组,批量赋值
rows, cols = pos.T  # 转置后拆分,等价于 rows = pos[:,0], cols = pos[:,1]
data[rows, cols] = 20

print(data)

运行结果和你原来的循环代码完全一致:

[[ 1  2  3]
 [ 4  5 20]
 [20  8  9]]

原理说明:

NumPy的高级索引允许你用数组作为索引来访问或修改数组元素。当你传入两个一维数组(rows和cols)时,NumPy会自动将它们的元素一一配对:

  • 第一个配对是rows[0]和cols[0] → 对应data[1,2]
  • 第二个配对是rows[1]和cols[1] → 对应data[2,0]

这种方式完全跳过了Python层面的循环,直接在底层C代码中完成批量操作,当pos数组的规模很大时(比如几万甚至几十万个坐标),性能优势会特别明显。

其他等价写法:

如果你觉得转置拆分有点绕,也可以直接提取pos的列来作为索引:

data[pos[:, 0], pos[:, 1]] = 20

效果和上面的代码完全一样,选你觉得更易读的写法就行。

总结一下,这种向量化的批量赋值方法是NumPy处理这类场景的标准最优方案,既简洁又高效,完全替代循环逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:31