我需要创建一个方形网格,其中x
和y
轴都具有以下参数:
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
进行了尝试。但这也没有帮助。
如何使此可视化工作正常?
答案 0 :(得分:2)
在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.