我将一个 numpy 矩阵列乘以一个浮点数并得到一个奇怪的舍入。是什么原因造成的?

I'm multiplying a numpy matrix column by a float and getting a strange rounding. What is causing this?

我试图通过将矩阵的列与浮点数相乘来更新矩阵的列。请参阅下面的代码。

H = np.array([[1, 2, 3], [4, 5, 6]])
print(H[:, 0] * 0.1)
H[:, 0] = H[:, 0] * 0.1
print(H[:, 0])

给出输出:

[0.1 0.4]
[0 0]

Numpy 似乎将浮点数 0.1 舍入为 0,但仅在将值分配给列时才这样做。这是怎么回事?

H 有数据类型 np.int_。因此,当您乘以 H[:, 0] * 0.1 时,输出会被正确计算并存储在类型为 np.float_ 的数组中。当您将该浮点数组分配回 H 时,它会使用截断转换为整数,因此为零。

您可以执行以下任一操作将 H 初始化为浮点类型:

  • H = np.array([[1.0, 2, 3], [4, 5, 6]])
  • H = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float_)