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
相关产品推荐
相关产品推荐

