def chi2_distance(a,b):
d=1-(np.dot(a,b)/(norm(a,axis=1)*norm(b)))
return d
a 和 b 是 float32,最多有 8 位小数。但我希望计算结果精确到 16 位小数。
a.shape 为 r*n,b 形状为 (n,)
我这样做了:
def chi2_distance(a,b):
a = a.astype(np.float64)
b = b.astype(np.float64)
d=1-(np.dot(a,b)/(norm(a,axis=1)*norm(b)))
return d
现在 d.dtype 是 float64 但我的结果仍然得到 8 位小数精度!!
@hpaulj 回答正确。简单来说,当您将函数输出放入 tolist() 时,它可以显示 16 位小数,对于 64 位计算机处理器来说,这是 64 位。 奇怪的是,显然 numpy 不能显示超过 32 位,但是当你将 numpy 转换为列表时,它可以显示 16 位小数。 代码如下:
import numpy as np
from numpy.linalg import norm
def chi2_distance(a,b):
a = a.astype(np.float64)
b = b.astype(np.float64)
d=(1-(np.dot(a,b)/(norm(a,axis=1)*norm(b)))).tolist()
return d
k=np.array([[8.34567,2,4],[10000.99887,6,7]])
kk=np.array([100.3456,200,300])
print(k.shape)
print(kk.shape)
hh=chi2_distance(k,kk)
print(hh)