获取float64用于numpy计算

e7arh2l6  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(103)
def chi2_distance(a,b):
   
    d=1-(np.dot(a,b)/(norm(a,axis=1)*norm(b)))
      
    return d

字符串
a和B是float 32,最多有8位小数。但我希望计算有16位小数的精度。
a.形状是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是float 64,但我仍然得到8十进制精度的结果!!

7eumitmz

7eumitmz1#

@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)

字符串

相关问题