Faiss 基礎index可以合成使用(七)

2021-10-06 09:54:58 字數 1690 閱讀 6278

import numpy as np 

d = 512 #維數

n_data = 2000

np.random.seed(0)

data =

mu = 3

sigma = 0.1

for i in range(n_data):

data = np.array(data).astype('float32')

#query

query =

n_query = 10

np.random.seed(12)

query =

for i in range(n_query):

query = np.array(query).astype('float32')

#匯入faiss

import sys

import faiss

乘積量化也可以作為粗量化器。其中有兩個引數,聚類中心數c,維度劃分m,這樣每個劃分都有c個倒排表,一種有c^m個倒排表。實際使用中,一般直接讓m=2。

multiindexquantizer也經常與indexflat對比,以便選取合適的引數。

nbits_mi = 5  # c

m_mi = 2 # m

coarse_quantizer_mi = faiss.multiindexquantizer(d, m_mi, nbits_mi) #不需要add任何資料

ncentroids_mi = 2 ** (m_mi * nbits_mi)

index = faiss.indexivfflat(coarse_quantizer_mi, d, ncentroids_mi)

index.quantizer_trains_alone = true #表示這是粗量化器的flag

index.train(data)

index.add(data)

index.nprobe = 50

dis, ind = index.search(query, 10)

print(ind)

結果為:

[[1269 1028 1895 120 1267 178 178 1061 1972 1029]

[1398 289 70 1023 1177 940 969 969 1568 700]

[ 345 389 1904 1992 1992 1612 1623 1632 539 366]

[ 112 1412 1624 879 394 1506 1398 1326 91 440]

[ 94 1459 1517 1723 1255 66 238 238 1755 472]

[ 574 574 1523 91 456 296 444 1384 103 1230]

[1391 876 91 1914 78 969 732 999 277 1158]

[1662 1654 722 1070 121 1496 631 631 1442 1738]

[ 154 99 31 1237 289 661 426 1008 1727 744]

[ 375 1826 610 750 750 1430 459 1339 471 441]]

todo

MongoDB 基礎 索引 Index(四)

索引支援在mongodb中高效地執行查詢。如果沒有索引,mongodb必須執行全集合掃瞄,即掃瞄集合中的每個文件。這種掃瞄全集合的查詢效率是非常低的,特別在處理大量的資料時,查詢可以要花費幾十秒甚至幾分鐘。如果查詢存在適當的索引,mongodb可以使用該索引限制必須檢查的文件數。索引是特殊的資料結構...

scala基礎4 集合

map set list 集合 可變集合可以在適當的地方被更新或擴充套件,意味著你可以修改 新增 移除乙個集合的元素。而不可變集合類,相比之下,永遠不會改變。不過,你仍然可以模擬新增,移除或更新操作。但是這些操作都將返回乙個新的集合,同時原來的集合不發生改變。不可變的都在immutable裡,可變的...

Python基礎(5) 集合

set,集合,具有某種特質的物件的集體。1,集合的定義 s set 定義乙個空集合 s 數字元素直接新增,字串元素要用括號括起來 插播一條重要特性,集合是無序的,也就是說,集合沒有索引,標誌集合元素的不再是順序而是內容,所以,集合又是不重複的。也就是,集合元素滿足互異性,每個元素在這個集合內都只有乙...