Numpy 求和函数 returns 1.67772e+07
Numpy sum function returns 1.67772e+07
我有两个大的 (432*136*136*46) 'numpy.ndarray' H1 和 H2,它们包含对应于两个模拟的高度值。我想生成一个数组,当 H1 和 H2 具有相同的高度时为 1,而当它们不相同时为 0。然后,我想知道我选择了多少个元素,所以我想计算这个矩阵的元素之和。这是我的代码:
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
经过一番研究,我了解到它与浮点数的最大尺寸有关。我尝试了几种格式,将 np.float64 替换为 int、float、np.float32 或什么都没有,它们都给出了相同的结果。
你知道我该怎么做才能得到真实的号码吗?
您的 diff
数组的类型是 H1
和 H2
的类型。由于您只添加了许多 1
,因此您可以将 diff
转换为 bool
:
print diff.astype(bool).sum()
或更简单
print (H1 == H2).sum()
但是由于浮点值不精确,可以测试非常小的差异:
print (abs(H1 - H2) < 1e-30).sum()
我有两个大的 (432*136*136*46) 'numpy.ndarray' H1 和 H2,它们包含对应于两个模拟的高度值。我想生成一个数组,当 H1 和 H2 具有相同的高度时为 1,而当它们不相同时为 0。然后,我想知道我选择了多少个元素,所以我想计算这个矩阵的元素之和。这是我的代码:
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
经过一番研究,我了解到它与浮点数的最大尺寸有关。我尝试了几种格式,将 np.float64 替换为 int、float、np.float32 或什么都没有,它们都给出了相同的结果。
你知道我该怎么做才能得到真实的号码吗?
您的 diff
数组的类型是 H1
和 H2
的类型。由于您只添加了许多 1
,因此您可以将 diff
转换为 bool
:
print diff.astype(bool).sum()
或更简单
print (H1 == H2).sum()
但是由于浮点值不精确,可以测试非常小的差异:
print (abs(H1 - H2) < 1e-30).sum()