我有两个大的(432 * 136 * 136 * 46)'numpy.ndarray'H1和H2,其中包含对应于两个模拟的高度值。当H1和H2具有相同的高度时,我想用1生成一个数组,当它们不具有相同的高度时,则为0。然后,我想知道我选择了多少个元素,所以我想计算这个矩阵元素的总和。这里是我的代码:Numpy sum函数返回1.67772e + 07
H1=np.concatenate([np.around(files1[i].hrtm()[:,0:45,:,:]/h) for i in range(0,files1.__len__())])
H2=np.concatenate([np.around(files2[i].hrtm()[:,0:45,:,:]/h) for i in range(0,files2.__len__())])
diff=np.absolute(H1-H2)
diff[diff==0.]=np.float64(-1.)
diff[diff!=-1]=np.float64(0.)
diff=diff*diff
print np.sum(diff)
这里是我的输出,这是永远不变的,不依赖于数据:
1.67772e+07
经过一番研究,我读了它与最大浮动的大小。我尝试了几种格式,用int,float,np.float32或者什么都替换np.float64,并且它们都给出了相同的结果。
你知道如何才能拥有真实的号码吗?
它与单精度浮点数的**精度**相关:在值2^24之上,加1不会产生任何影响,因为它是绝对的rbed。 –
@rth:这是一个奇怪的断言。 'diff == 0.'将给出一个数组,其中包含与True和False在其他地方相对应的位置。它将按照OP的意图工作。 –
@MarkDickinson请注意,“如果'diff'是一个浮点数组”在我的评论。我错过了它被转换为带有'np.around'的整数的事实。否则,你最终可能会遇到四舍五入的问题,比如检查'2.2 * 3.0 == 6.6',它将在python中计算为False。 – rth