いくつかの分析を行い、距離値の完全な 2D マトリックスを出力し、scipy python プロセス (anaconda、fwiw) を起動して階層的クラスタリングを行う C# プログラムがあります。問題は次のとおりです。各軸に沿って順序付けできるように、何らかの順序付けを課す必要があります。私のコードは多かれ少なかれ次のようになります。
var set = set.OrderBy(x => x.GetHashCode());
foreach(Point p1 in set)
{
foreach(Point p2 in set)
{
double distance = Distance(p1,p2);
//save out the distance so that it can be written to a 2d matrix
}
}
//write out the 2d matrix...
//call python...
トリックは次のとおりです。順序付けスキームを変更すると、サイズで並べ替えたり、乱数ジェネレーターを使用したりすると、Pythonは同じカットオフに対して異なる数のクラスターを計算します。距離の値が同じであることはわかっています-サイズ順に並べられたすべてを単一の文字列に出力し、その文字列でmd5ハッシュを計算しますが、ハッシュは常に同じです。私はscipyのリンケージ()関数が2次元行列を好まないことを知っています(私が読んだいくつかのバグ)が、2次元行列が読み込まれると、ここに示すようにsquareform(distMatrix)で圧縮行列に変換します: scipy.cluster.hierarchy.linkage() の距離行列? .
とにかく、何かアイデアはありますか?scipy にバグがあるとは本当に信じられませんが、オプションが不足しています...
ありがとう!-デニー-