获取float64进行numpy计算

问题描述 投票:0回答:1
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 位小数精度!!

numpy decimal precision
1个回答
0
投票

@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)
© www.soinside.com 2019 - 2024. All rights reserved.