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

如何使用数组索引NumPy数组并完成指定位置赋值操作

嘿,这个问题其实很直接——你提出的a[row_index, col_index] = 1这种索引赋值方式完全可以实现你想要的效果!让我给你拆解一下背后的逻辑,再验证给你看:

第一步:先创建初始数组

先把你给定的数组定义好:

import numpy as np
a = np.arange(30).reshape((3, 10))
col_index = [[1,2,3,5], [3,4,5,7]]
row_index = [2,1]

初始的a看起来是这样的:

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]]

第二步:执行你说的赋值操作

直接运行你提到的代码:

a[row_index, col_index] = 1

然后打印修改后的a:

print(a)

输出结果正好是你想要的目标数组:

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12  1  1  1 16  1 18 19]
 [20  1  1  1 24  1 26 27 28 29]]

为什么这个索引方式能生效?

这里用到了NumPy的广播式高级索引机制:

  • row_index是长度为2的一维数组,col_index是2行4列的二维数组。
  • NumPy会自动把row_index广播成和col_index相同的形状(也就是[[2,2,2,2], [1,1,1,1]]),这样每一组(行索引, 列索引)就会精准对应到你想修改的位置:
    • 第一组索引对:(2,1)、(2,2)、(2,3)、(2,5) → 对应原数组第三行(索引2)的第1、2、3、5列
    • 第二组索引对:(1,3)、(1,4)、(1,5)、(1,7) → 对应原数组第二行(索引1)的第3、4、5、7列
  • 赋值操作会一次性把所有这些位置的元素设为1,完美匹配你的需求。

补充:如果想避免广播歧义怎么办?

要是你觉得广播的逻辑有点绕,也可以手动把row_index转换成和col_index同形状的数组,比如用np.repeat:

row_index_expanded = np.repeat(row_index, 4).reshape(2,4)
a[row_index_expanded, col_index] = 1

这和直接用广播的效果完全一样,只是更直观地展示了索引的对应关系。

总的来说,你一开始想到的索引方式就完全正确,直接用就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:59