私は scipy を初めて使用しますが、最近、cdist
距離を計算するために独自のカスタム関数をどこに渡すことができるかについて学びました。ただし、cdist
個々のポイント間の距離のみを計算します (したがって、カスタム関数は 2 つのポイント間の距離を計算する必要があります)。これはほとんどの場合に機能しますが、私の場合、距離はポイントのグループ間で計算されます。(例えば、サイズ 3 のスライド ウィンドウと考えることができます)。例はこれを明確にします:
def f(*a, **kw):
print(a, kw)
return 0
# Consider it a set of points: [p0, p1, p2, ...]
a = numpy.array([[1,2,3],[10,11,12],[20,21,22],[30,31,32]])
# Consider it a set of points: [q0, q1, q2, ...]
b = numpy.array([[4,5,6],[14,15,16],[24,25,26],[34,35,36],[44,45,46]])
単純に を実行すると、 が呼び出されるscipy.spatial.distance.cdist(a, b, f)
たびにf
、各配列から 1 つのエントリのみが に渡されf
ます。したがって、関数呼び出し (および渡された値) は次のようになります。
1st call: p0, q0
2nd call: p0, q1
3rd call: p0, q2
4th call: p0, q3
5th call: p0, q4 <--
6th call: p1, q0
7th call: p1, q1
...and so on...
しかし、私が欲しいのは(サイズ3のウィンドウの場合)のようなものです:
1st call: [p0,p1,p2], [q0,q1,q2]
2nd call: [p0,p1,p2], [q1,q2,q3]
3rd call: [p0,p1,p2], [q2,q3,q4] <-- only till boundary
4th call: [p1,p2,p3], [q0,q1,q2]
5th call: [p1,p2,p3], [q1,q2,q3]
...and so on...
私はたくさん検索し、scipy の汎用フィルターと相関関数も試しましたが、(私が理解している限り) その機能を提供していません。上記のように距離を計算する方法はありますか?
どんなアイデア/提案も大歓迎です。ありがとう