为何两个NumPy数组差值的平方结果为array([3])?求解释
为什么代码返回
array([3])? 嘿,这个问题其实是踩了Python运算符的小坑啦!让我给你拆解一下:
首先看你的代码:
import numpy as np; vector = np.array([1]); vector2 = np.array([0]); (vector - vector2)^2
你本来想做的应该是计算两个向量差值的平方对吧?但这里的问题出在运算符^上——在Python(包括numpy数组运算)里,^不是平方运算符,而是按位异或(bitwise XOR)!
那具体计算过程是这样的:
- 第一步:计算
vector - vector2,[1] - [0]得到array([1]) - 第二步:用这个结果和
2做按位异或运算:- 1的二进制是
0b01 - 2的二进制是
0b10 - 按位异或的规则是「对应位相同为0,不同为1」,所以
0b01 ^ 0b10 = 0b11,转换成十进制就是3
- 1的二进制是
所以最终得到的array([3])里的[3],就是1和2按位异或后的十进制结果,被包装在numpy数组里返回啦。
如果要实现你原本想要的「差值平方」效果,应该用**运算符或者np.square()函数,比如:
(vector - vector2)**2 # 会得到预期的array([1])
内容的提问来源于stack exchange,提问作者Marty




