【发布时间】:2013-10-22 07:20:14
【问题描述】:
numpy.arange 生成的对象出现了最奇怪的行为:
for i in numpy.arange(xo, xn+h, h):
xs.append(float(i))
在这种情况下,xo=1、xn=4、h=0.1。
现在,我希望 xs[-1] 完全等于 4.0 == float(4)。但是,我得到以下信息:
>>> foo = xs[-1]
>>> foo == float(4)
False
>>> float(foo) == float(4)
False
>>> foo
4.0
>>> type(foo)
<type 'float'>
>>> int(sympy.ceiling(4.0)), int(sympy.ceiling(foo))
4 5
这里到底发生了什么?
将print type(i) 放在for 循环中会打印出<type 'numpy.float64'>。在float(i) 选角期间可能发生了什么?使用numpy.asscalar 不会改变任何东西。
使用math.ceil(foo) 而不是sympy.ceiling(foo) 会产生同样的问题(这是我真正需要工作的部分)。
【问题讨论】:
-
numpy.float64 vs sympy.float?如果你使用 sympy,我猜你可能会遇到类似的问题?
-
@usethedeathstar 我使用内置的
float()进行投射。 Sympy 只用在上面控制台 I/O 的最后一行。而且,正如我所说,使用math.ceil而不是sympy.ceiling返回相同。 -
你应该避免
np.arange使用浮点数。而是使用np.linspace。
标签: python numpy casting floating-point sympy