我将两个float64
矩阵与以下值相乘:
import numpy as np
# 4x5 matrix with identical columns.
x = np.zeros((4, 5,), dtype=np.float64)
x[1] = 1
x[3] = -3
w = np.array([1, 1, -1, 1 / 3], dtype=np.float64)
# The result should be an array of size 5 with equal values.
result = np.matmul(w, x)
print(x)
>>>
[[ 0. 0. 0. 0. 0.]
[ 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 0.]
[-3. -3. -3. -3. -3.]]
print(w)
>>> [ 1. 1. -1. 0.33333333]
print(result)
>>> [5.55111512e-17 5.55111512e-17 5.55111512e-17 5.55111512e-17 0.00000000e+00]
result
数组应该包含相同的值,因为每个项都是具有相同列的w
数组的点积。但是,最后一项为0.0,与其他非常接近0的值不同。这对下游的计算有很大影响
我猜这与值1/3有关,因为用1/2替换它会得到稳定的结果。然而,如何解决这种不稳定性呢
其他信息,因为问题不会在所有机器上重现
我正在MacOS上使用numpy 1.18.2和Python 3.7.3。 这个问题在另一台运行Ubuntu的机器上重现,该机器使用相同的Python和numpy版本
更改了数组大小并更改了将哪些行设置为1和-3&;1/3在使用python 3.9.7和numpy 1.21.2运行macOS 11.6的i7 Mac上,只有当第0行为1,第2行为-3,第1行为1,第3行为-3时,才会出现5.5e-17值。5.5e-17和0值的数量根据列的数量而变化。一些列(如16)生成所有5.5e-17值。当-3&;将1/3替换为不是2的因子的值,例如12&;1/12至5.5e-17有时会更改为不同的e-17值
相关问题 更多 >
编程相关推荐