提问人:MJELVEH 提问时间:10/28/2023 更新时间:11/3/2023 访问量:29
获取 float64 进行 numpy 计算
get float64 for numpy calculation
问:
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 shape 为 (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 位小数点!
答:
0赞
MJELVEH
11/3/2023
#1
@hpaulj答对了。简单地说,当你把函数输出到list()时,它可以显示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)
评论
d.tolist()
a.tolist()