Python 与Django的自定义比较(汉明距离)

Python 与Django的自定义比较(汉明距离),python,django,django-queryset,django-orm,hamming-distance,Python,Django,Django Queryset,Django Orm,Hamming Distance,我有下面的代码,允许我查找相等has(等同)的图像,但假设我只想查找汉明距离小于某个数字的图像,这可以合并到django QuerySet或原始sql中吗?我不想获取所有内容并与python进行比较,因为这非常慢,而且我需要很多图像 当前代码: def duplicates(request): duplicate_images = [] images = Image.objects.all() for image in images: duplicates

我有下面的代码,允许我查找相等has(等同)的图像,但假设我只想查找汉明距离小于某个数字的图像,这可以合并到django QuerySet或原始sql中吗?我不想获取所有内容并与python进行比较,因为这非常慢,而且我需要很多图像

当前代码:

def duplicates(request):
    duplicate_images = []
    images = Image.objects.all()
    for image in images:
        duplicates = Image.objects.filter(hash=image.hash).exclude(pk=image.pk)
        for duplicate in duplicates:
            duplicate_images.append([image, duplicate])
        if len(duplicate_images) > 1000:
            break

以下是如何使用postgres扩展实现此功能:

安装:

$ git clone https://github.com/eulerto/pg_similarity.git
$ cd pg_similarity
$ USE_PGXS=1 make
$ USE_PGXS=1 make install
$ psql mydb
psql (9.3.5)
Type "help" for help.

mydb=# CREATE EXTENSION pg_similarity;
CREATE EXTENSION
不,为了使用hamming_文本函数,您可以使用自定义的“WHERE”子句创建django查询集

image = Image.objects.get(pk=1252) # the image you want to compare to
similar = Image.objects.extra(where=['hamming_text(hash,%s)>=0.88'],
                              params=[image.hash])
瞧,它起作用了


注意:这里的汉明距离是自动标准化的,因此0表示完全不同,1表示完全相同。

下面是如何使用postgres扩展实现这一点:

安装:

$ git clone https://github.com/eulerto/pg_similarity.git
$ cd pg_similarity
$ USE_PGXS=1 make
$ USE_PGXS=1 make install
$ psql mydb
psql (9.3.5)
Type "help" for help.

mydb=# CREATE EXTENSION pg_similarity;
CREATE EXTENSION
不,为了使用hamming_文本函数,您可以使用自定义的“WHERE”子句创建django查询集

image = Image.objects.get(pk=1252) # the image you want to compare to
similar = Image.objects.extra(where=['hamming_text(hash,%s)>=0.88'],
                              params=[image.hash])
瞧,它起作用了


注意:这里的汉明距离是自动标准化的,因此0表示完全不同,1表示完全相同。

我的数据库中已经有哈希,实现比较汉明距离的函数很容易,这不是我的问题,但谢谢。我的数据库中已经有了哈希,实现一个比较汉明距离的函数很容易,这不是我的问题,但谢谢。