Python的numpy的在人气指数和linspace意想不到的结果
问题描述:
我需要创建一个方形网格,具有下列参数都x
和y
轴: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.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.