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

NumPy中矩阵作为布尔索引的赋值操作结果困惑

解析NumPy中a[~b] = 0.0的索引赋值原理

1. 变量基础定义

代码中创建的两个矩阵:

  • a = np.mat('1 1; 1 2') 生成2x2矩阵:
    [[1 1]
     [1 2]]
    
  • b = np.mat('0 0; 1 1') 生成2x2整数矩阵:
    [[0 0]
     [1 1]]
    

2. 按位取反~b的计算逻辑

NumPy中~是按位取反运算符,针对整数的二进制补码进行取反:

  • 整数0的补码全为0,取反后全为1,对应十进制-1
  • 整数1的补码为...0001,取反后为...1110,对应十进制-2
    因此~b的结果为:
[[-1 -1]
 [-2 -2]]

3. 索引赋值a[~b] = 0.0的执行过程

np.mat创建的是严格二维的矩阵对象,单整数索引默认指代行索引,且负索引表示从末尾计数:

  • -1对应矩阵的最后一行(第二行),-2对应倒数第二行(第一行)
  • ~b是2x2的索引矩阵,a[~b]会按索引取出对应行,形成一个三维结构:
    [[[1 2], [1 2]],
     [[1 1], [1 1]]]
    
  • 赋值0.0时,NumPy会将所有取出的行直接置为0:先把a[-1](第二行)设为[0 0],再把a[-2](第一行)设为[0 0],最终矩阵a的所有元素都变为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:40:26