マトリックスを (すばやく) 希薄化する必要があります。
Rarefaction - 豊富なマトリックスを均一なサンプリング深度に変換します。
この例では、各行がサンプルであり、サンプリング深度は行の合計です。サンプルごとにマトリックスをランダムに(置換して)サンプリングしたいmin(rowsums(matrix))
。
行列があるとします:
>>> m = [ [0, 9, 0],
... [0, 3, 3],
... [0, 4, 4] ]
min(rowsums(matrix))
レアファクション関数は、置換回数 (この場合は 6) で行ごとにランダムにサンプリングします。
>>> rf = rarefaction(m)
>>> rf
[ [0, 6, 0], # sum = 6
[0, 3, 3], # sum = 6
[0, 3, 3] ] # sum = 6
結果はランダムですが、行の合計は常に同じです。
>>> rf = rarefaction(m)
>>> rf
[ [0, 6, 0], # sum = 6
[0, 2, 4], # sum = 6
[0, 4, 2], ] # sum = 6
PyCogentには、これを行ごとに実行する関数がありますが、大きな行列では非常に遅くなります。
これを実行できる関数が Numpy にあるような気がしますが、それが何と呼ばれるかはわかりません。