python - 交互式和程序之间的数组运算结果不同

标签 python arrays numpy operation

I compare two arrays interactively in iPython, the returns are correct:

In[143]: r=np.array([0.,0.04166667, 0.08333333, 0.125, 0.16666667 , 0.20833333 , 0.25, 0.29166667 , 0.33333333 , 0.375, 0.41666667,0.45833333 , 0.5, 0.54166667, 0.58333333 , 0.625, 0.66666667 , 0.70833333 , 0.75, 0.79166667, 0.83333333, 0.875, 0.91666667, 0.95833333])

In[144]: c=np.array([ 0., 0.04166667, 0., 0., 0., 0.20833333, 0., 0.29166667 , 0., 0.  , 0., 0.45833333, 0.,        0.54166667, 0. , 0. , 0.,0.70833333, 0. , 0.79166667 , 0., 0., 0., 0.95833333])

In [145]: c==r

Out[145]: 
array([ True,  True, False, False, False,  True, False,  True, False,
       False, False,  True, False,  True, False, False, False,  True,
       False,  True, False, False, False,  True], dtype=bool

)

但是在“相同”设置的Python程序中,结果不正确:

turns=1

r = np.linspace(1/24, turns, 24*turns,endpoint=False)

rr=r%1 

c=np.array([0.,0.04166667,0,0,0,0.20833333,0,0.29166667,0,0,0,0.45833333,
0,0.54166667,0,0,0,0.70833333,0,0.79166667,0,0,0,0.95833333])

cc=np.tile(c,turns)

print([rr==cc])

结果不同:

[array([ True, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False], dtype=bool)]

我犯了什么错误? 感谢您的帮助。

最佳答案

这是浮点精度的问题;你的第一个和第二个案例确实不一样Floating Point guide是这里有用的资源。

在第一个实例中,您从浮点文字填充两个数组,然后直接比较它们。在第二个中,您使用 numpy 函数的输出,并直接将其与仍由文字创建的第二个数组进行比较。

尽管函数输出的显示版本看起来相同,但实际数字的精度比这更高,这足以摆脱 == 比较;你不应该(几乎)从一开始就对 float 使用相等比较。

一个简单的例子:

>> print 0.1 + 0.2
0.3
>> 0.1 + 0.2
0.30000000000000004

关于python - 交互式和程序之间的数组运算结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557406/

相关文章:

python - 一种使用 numpy 的热编码

python - 计算生成器/迭代器中项目数的最短方法是什么?

java - 如何让 shuffler 方法仅对数组中的某些索引进行洗牌?虽然不打乱我想保持不变的索引

python-3.x - 根据条件替换 python numpy 矩阵值,而不使用 for 循环

带有 np.intc 的 Python 范围

python - SQLAlchemy 中继承类之间的正确引用

python - web2py 数据库未定义

arrays - vba,为什么无维数组与 Split() 一起使用

java - 复制数组的数组旋转时出现数组异常

python - 切片 numpy 数组以使其具有所需的形状