首页 > 解决方案 > 我将一个 numpy 矩阵列乘以一个浮点数并得到一个奇怪的舍入。这是什么原因造成的?

问题描述

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

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.10,但仅在将值分配给列时。这里发生了什么?

标签: arraysnumpyfloating-pointroundingnumpy-slicing

解决方案


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

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

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

推荐阅读