获取 float64 进行 numpy 计算

get float64 for numpy calculation

提问人:MJELVEH 提问时间:10/28/2023 更新时间:11/3/2023 访问量:29

问:

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 位小数点!

numpy 十进制 精度

评论

0赞 Jérôme Richard 10/28/2023
好吧,你不能得到比输入更精确的精度......顺便说一句,你如何衡量准确性?
1赞 hpaulj 10/28/2023
你怎么知道它有那么准确?只是从打印显示/你看过吗?还要检查d.tolist()a.tolist()
0赞 MJELVEH 11/3/2023
@hpaulj你写的是正确的!

答:

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)