行间Numpy矩阵乘法不稳定性

2024-04-19 04:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我将两个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版本


Tags: importnumpy机器aswithnp矩阵数组
1条回答
网友
1楼 · 发布于 2024-04-19 04:40:16

更改了数组大小并更改了将哪些行设置为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值

相关问题 更多 >