numpy.array_equal returns 错误,即使数组具有相同的形状和值
numpy.array_equal returns False, even though arrays have the same shape and values
我有一个很简单的功能,如下图
def new_price(A, B, x):
return np.linalg.inv(A @ B) @ x
这些是我给它的输入
A = np.array([
[2, 0, 1, 0],
[1, 1, 1, 1],
[0, 0, 0, 10]
])
B = np.array([
[3, 3, 3],
[2, 0, 8],
[0, 5, 3],
[0, 0, 10]
])
x = np.array([ 84, 149, 500])
这个returns数组[ 1. 3. 5.]
。但是,当我进行以下相等性检查时,它 returns False
v1 = new_price(A, B, x)
v2 = np.array([1.0, 3.0, 5.0])
np.array_equal(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]))
我检查了一下,两个数组的形状和类型都相同。我在这里错过了什么?
不完全相等:
>>> new_price(A, B, [ 84, 149, 500]) - np.array([1, 3, 5])
array([ 2.84217094e-14, -1.42108547e-14, 0.00000000e+00])
更好地使用np.allclose()
:
>>> np.allclose(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]))
True
Returns True if two arrays are element-wise equal within a tolerance.
您可以调整相对和绝对容差。
对于非常小的值仍然适用:
>>> np.allclose(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]),
atol=1e-13, rtol=1e-14)
True
找到极限:
>>> np.allclose(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]),
atol=1e-14, rtol=1e-14)
False
我有一个很简单的功能,如下图
def new_price(A, B, x):
return np.linalg.inv(A @ B) @ x
这些是我给它的输入
A = np.array([
[2, 0, 1, 0],
[1, 1, 1, 1],
[0, 0, 0, 10]
])
B = np.array([
[3, 3, 3],
[2, 0, 8],
[0, 5, 3],
[0, 0, 10]
])
x = np.array([ 84, 149, 500])
这个returns数组[ 1. 3. 5.]
。但是,当我进行以下相等性检查时,它 returns False
v1 = new_price(A, B, x)
v2 = np.array([1.0, 3.0, 5.0])
np.array_equal(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]))
我检查了一下,两个数组的形状和类型都相同。我在这里错过了什么?
不完全相等:
>>> new_price(A, B, [ 84, 149, 500]) - np.array([1, 3, 5])
array([ 2.84217094e-14, -1.42108547e-14, 0.00000000e+00])
更好地使用np.allclose()
:
>>> np.allclose(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]))
True
Returns True if two arrays are element-wise equal within a tolerance.
您可以调整相对和绝对容差。
对于非常小的值仍然适用:
>>> np.allclose(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]),
atol=1e-13, rtol=1e-14)
True
找到极限:
>>> np.allclose(new_price(A, B, [ 84, 149, 500]), np.array([1.0, 3.0, 5.0]),
atol=1e-14, rtol=1e-14)
False