-
Notifications
You must be signed in to change notification settings - Fork 115
Pythonクイックスタート
masajiro edited this page Nov 25, 2019
·
1 revision
Python バインディング (ngtpy) は以下のようにインストールします。
pip3 install ngt
以下はインデックスの初期化とデータ登録の例です。
# create-simple.py
import ngtpy
with open('./data/sift-dataset-5k.tsv', 'r', newline='\n') as fin:
ngtpy.create('anng', 128) # create an empty index
index = ngtpy.Index('anng') # open the index
for line in fin:
object = list(map(float, line.rstrip().split('\t')))
index.insert(object[:128]) # append objects to the index
index.build_index() # build index
index.save() # save the index
ngtpy.create() は指定されたディレクトリ anng を生成し、インデックスとして初期化します。 ngtpy.Index() はインデックスをオープンします。 ./data/sift-dataset-5k.tsv は登録するオブジェクトのオブジェクトファイルです。 その各行は各オブジェクトです。 そのファイルには各オブジェクトの後ろに追加データがあるので、object[:128]のように登録前に追加データを削除します。 ngtpy.Index.insert() はオブジェクトをインデックスに追加します。 ngtpy.Index.build_index() は追加オブジェクトのエントリをインデックスに生成します。 ngtpy.Index.save() はインデックスを保存します。
上記例を以下のコマンドで実行します。
cd (NGT_TOP_DIR)
python3 create-simple.py
以下は近傍検索の例です。
# search-simple.py
import ngtpy
index = ngtpy.Index('anng', read_only = True, zero_based_numbering = False) # open the index
with open('./data/sift-query-3.tsv', 'r', newline='\n') as fin:
for i, line in enumerate(fin):
query_object = list(map(float, line.rstrip().split('\t')))
result = index.search(query_object, 5) # nearest neighbor search
print('Query No.{}'.format(i + 1))
print('Rank\tID\tDistance')
for rank, object in enumerate(result):
print('{}\t{}\t{:.6f}'.format(rank + 1, object[0], object[1]))
print()
./data/sift-query-3.tsv はクエリオブジェクトからなります。フォーマットは登録オブジェクトファイルと同じです。このファイルは3つのクエリからなるので、これらのクエリで検索された3つの結果が表示されます。検索結果数5はngtpy.Index.search()の2つの引数で指定されています。
Query No.1
Rank ID Distance
1 3031 239.332397
2 4079 240.002090
3 3164 244.503586
4 3718 246.763046
5 157 251.093613
...
Command line tool
Python
C++