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 數字元素直接新增,字串元素要用括號括起來 插播一條重要特性,集合是無序的,也就是說,集合沒有索引,標誌集合元素的不再是順序而是內容,所以,集合又是不重複的。也就是,集合元素滿足互異性,每個元素在這個集合內都只有乙...