Python numpy 在 arange 和 linspace 中出现意外结果

Python numpy unexpected results in arange and linspace

我需要创建一个具有 xy 轴的方形网格,其参数如下:

min_range = 0
max_range = 0.8
cell_size = 0.01

以及我所做的:

import numpy as np
x_ax = np.arange(min_range, max_range, cell_size) ### This gives [0,...,0.1,...,0.29,0.79]
y_ax = np.arange(min_range, max_range, cell_size) ### This also gives [0,...,0.1,...,0.29,0.79]
### Cartesian product
lattice = np.transpose([np.tile(x_ax, y_ax.shape[0]), np.repeat(y_ax, x_ax.shape[0])])

然后,lattice 矩阵作为参数传递给另一个函数,并为它的每个单元格分配一个值。我需要使用存储在单独数组中的指定值来可视化此网格。所以我做的是:

lattice = np.asarray(lattice/cell_size,dtype=np.int32) ###This is supposed to contain matrix indices.

这就是我得到奇怪结果的地方。 lattice 矩阵中的某些值,例如 0.29 除以 0.01,即 cell_size 得到 28。我无法弄清楚这个问题是从哪里来的,因为它只发生在预期范围内的一些值上。我怀疑这是 here 提到的浮点数的舍入问题,并尝试使用 np.linspace 。但这也无济于事。

我怎样才能使这个可视化正常工作?

在 Python 控制台中您将看到

>>> 0.29/0.01
28.999999999999996
>>> import numpy as np
>>> np.int32(0.29/0.01)
28

所以你走在正确的道路上。这是由于浮点计算。一旦将其转换为 np.int32,小数位将被截断,结果为 28。您应该四舍五入结果,而不仅仅是铸造:

>>> np.int32(np.round(0.29/0.01))
29

对于您的应用程序,这意味着您必须编写

lattice = np.asarray(np.round(lattice/cell_size),dtype=np.int32) ###This is supposed to contain matrix indices.