-
Notifications
You must be signed in to change notification settings - Fork 143
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于查询milvus的向量精度问题 #901
Comments
大概率你这个数据存错了,用了double格式。这点精度对于搜索不会有任何区别 |
请问你是用什么办法获取的? restful api? @XueJian-Zhang |
直接调用milvus的api就可以获取到,网上有很多教程。你可以参考下这位博主的方法:https://blog.csdn.net/lsqingfeng/article/details/138212915 |
python/javascript这些语言的浮点型是跟系统的位数走的,64位系统就会以64位来表示浮点数,但实际上在调用milvus rpc接口的时候其实都是以float32传输。对于用户来说就像变了个魔术似的。 |
你用的是python sdk,我说过python语言对于浮点型的数值总是转成64位显示。 我们把这几行代码改成如下:
打断点进入,你会看到 field_data.vectors.float_vector 这个是由Milvus rpc接口返回的结构体,打印出来的值是32位浮点型。 再来看search()接口干了什么。
它直接把rpc接口返回的response包装成SearchResult给你,然后SearchResult里面是直接提取向量数据,没有经过numpy.single的转化,所以python自动用64位浮点型来表示。 |
再强调一遍,milvus服务端处理向量,无论是存储,计算还是输出,都是以float32来处理。各个SDK拿到的向量数据都是32位浮点型。如果你看到的是64位浮点数,那是因为某些语言本身自动把32位转成了64位表示,实际上32位精度之外的数字都是随机数字,没有任何意义。 |
看到SearchParam的withFloatVectors方法,入参是‘’Float‘’ ,用float的话,会导致精度丢失,这个有什么解决方案吗?
The text was updated successfully, but these errors were encountered: