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

Python:利用NumPy数组A的指定索引将数组B对应位置置零

解决NumPy数组按索引替换的问题

嘿,我来帮你搞定这个问题!你已经成功找到了A中大于4的元素的索引,接下来只需要用正确的方式利用这些索引修改B就可以了,甚至还有更简洁的方法哦😉

方法1:使用你已经得到的argwhere索引

你已经通过a = np.argwhere(A > 4)得到了索引数组[[0 1], [0 2], [2 0]],但直接用B[a] = 0是不行的——因为argwhere返回的是每行对应一个(行,列)索引对的二维数组,我们需要把行索引和列索引分开提取出来,再组合访问B的位置:

import numpy as np

A = np.array([ [1,6,5], [2,3,4], [8,3,0] ])
B = np.array([ [3,2,1], [9,2,8], [2,1,8] ])

# 获取A中大于4的元素的索引
a = np.argwhere(A > 4)
# 拆分行索引和列索引,赋值为0
B[a[:, 0], a[:, 1]] = 0

print(B)

方法2:更简洁的布尔掩码(推荐)

其实你完全可以跳过argwhere这一步,直接利用NumPy的布尔索引特性,一步到位完成修改:

import numpy as np

A = np.array([ [1,6,5], [2,3,4], [8,3,0] ])
B = np.array([ [3,2,1], [9,2,8], [2,1,8] ])

# 直接用A>4生成的布尔数组作为索引,将对应位置设为0
B[A > 4] = 0

print(B)

两种方法运行后都会输出你期望的结果:

[[3 0 0]
 [9 2 8]
 [0 1 8]]

为什么直接用B[a] = 0不行?

argwhere返回的是形状为(N,2)的数组,如果你直接写B[a],NumPy会把每一行的索引对当成行索引去取B的整行,这显然不是你想要的效果。而B[a[:,0], a[:,1]]则是把所有行索引和列索引分别打包,精准定位到每个需要修改的元素位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:10