考虑以下代码行:
y[:,:,i,p] = np.divide(x[:,:,i,p], npq) #divide array by constant
orig = np.dot(y[:,:,i,p], npq) #take previous output, and multiply by constant
print(np.mean(x[:,:,i,p] - orig)) #print mean. should be 0
这些计算的预期输出应为0。相反,我得到的是:
...
0.0
-1.81671383445
-0.0719097733101
-0.102587446807
...
我做错什么了?我试过把所有的数字都转换成整数而不是浮点数,错误依然存在。你知道吗
编辑 np.乘法无法解决问题。 我自己写了乘法码。它只是在阵列中运行,工作得很好,尽管速度慢得多。你知道吗
原因很可能是有限精度浮点数的精度损失。你知道吗
如果
npq
是标量,那么np.dot(y[:,:,i,p], npq)
将给出与np.multiply(y[:,:,i,p], npq)
相同的结果。因此,如果浮点计算是以无限精度完成的,那么您的代码将打印0.0。当然,它们不是;默认的浮点数据类型是np.float64
,因此在算术计算中可能会丢失精度。我怀疑这就是为什么打印的值不是0.0。你知道吗例如
如果我们有无限精度,这个结果将是0:
“往返”计算中最大的误差是:
使用
np.multiply(y, npq)
而不是np.dot(y, npq)
可以准确地给出结果:相关问题 更多 >
编程相关推荐