Python的numpy的在人气指数和linspace意想不到的结果

问题描述:

我需要创建一个方形网格,具有下列参数都xy轴:Python的numpy的在人气指数和linspace意想不到的结果

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.01cell_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.