作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个返回 16 个元素的数组的 exe。我必须使用 php 将这个数组传递给 Mysql 来计算欧几里得距离。我在 MySQL 中的表是这样的。
id |img_id | features_1|features_2|features_3|features_4|features_5|features_6|features_7|...upto features_16
1 1 0.389 0.4567 0.8981 0.2345
2 2 0.9878 0.4567 0.56122 0.4532
3 3
4 4
......................
所以每张图片我有 16 个特征,现在我有 30,000 张图片,img_id 最多为 30,000。我必须计算数组与通过 php 传递的 exe 和数据库中的数据的欧氏距离,并返回欧氏距离最小的 6 个图像的 img_id。即假设我有一个来自 exe A[0.458,0.234,0.4567,0.2398] 的数组,我必须用这个数组计算每个 img_id 的距离,即对于 img_id=1,距离将为 ((0.458-0.389)^2+(0.234- 0.4567)^2+(0.4567-0.8981)^2+(0.2398-0.2345)^2) 我必须对所有 30,000 张图像重复此过程并返回距离最小的 6 个 img_id。什么是高效快速的计算方法?
最佳答案
因为 php 很慢,你应该像这样直接在 SQL 中执行此操作:
SELECT * FROM tablename
ORDER BY ABS(f1 - :f1) + ABS(f2 - :f2) + ... DESC
LIMIT 6;
请注意,我使用的是绝对范数而不是欧几里得范数,如果您对实际值不感兴趣,这没有任何区别(因为在具有有限维度的向量空间中,所有范数都是等效的)。 sqlite for eample 不提供 SQUARE
函数并且一直写 (f1 - :f1) * (f1 - :f1)
很烦人,所以我想这是一个不错的解决方案。
关于php - 计算平方欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006763/
我是一名优秀的程序员,十分优秀!