0

ボール ツリー オブジェクトのリストを以下のように定義しました。ここで、input1は形状 (100, 320) の NumPy 配列です。

bt = []
bt.append(BallTree(input1)) 

の要素の 1 つをinput1サンプル クエリとして取り上げます。ここで、sample_indexは境界内にあると想定されます。

sample_query = input1[sample_index,:]

# Find nearest neighbour and compute distance and index
distance, index = bt[0].query(sample_query,1)

ここで、distance[0]「sample_query」が のメンバーであることを考えると、期待どおり は 0 ですinput1

# Adding another BallTree instance to the list
#input2 is a numpy array with shape (70,320)  
bt.append(BallTree(input2))
distance, index = bt[0].query(sample_query,1)
print distance[0]
# Output here is NOT zero (NOT expected!!)

ボール ツリー リスト 'bt' にボール ツリー オブジェクトをもう 1 つ追加すると、'sample_query' と bt[0] の最近傍距離が変わるのはなぜですか? リスト bt にもう 1 つのオブジェクトを追加すると、オブジェクト bt[0] は変更されないことが予想されます。私の期待は正しいですか?

4

2 に答える 2

2

どちらの場合も同じボール ツリー インスタンスに対してクエリを実行しているbt[0]ため、同じ結果が 2 回得られますが、これは当然のことです。ところで、BallTree インスタンスを Python リストに入れる理由がわかりません。

于 2012-09-05T21:09:26.773 に答える
0

この例では、BallTreeの理解にギャップがありました。

少し掘り下げてみると、(質問の表記法から借用して)bt[0].dataが実際にはコピーではなく入力numpy配列を指していることがわかりました。入力numpy配列を再利用してさらにボールツリーを作成していたため、bt[0]で表示されるデータは毎回途切れがちでした。

ボールツリーインスタンスごとにnumpy配列が作成される(または「C-speak」で割り当てられる)ことを確認すると、ボールツリークエリの結果は一貫しています。

于 2012-09-06T04:48:04.003 に答える