状態空間を表す 2D numpy 配列 S があり、80000000 行 (状態として) と 5 列 (状態変数として) があります。
K0 を S で初期化し、各反復で状態遷移関数 f(x) を Ki のすべての状態に適用し、f(x) が Ki に含まれていない状態を削除して、結果として Ki+1 になります。収束するまで、つまり Ki+1 = Ki です。
このようにすると、何年もかかります:
K = S
to_delete = [0]
While to_delete:
to_delete = []
for i in xrange(len(K)):
if not f(i) in K:
to_delete.append(K(i))
K = delete(K,to_delete,0)
だから私はベクトル化された実装を作りたかった:
K を列にスライスし、f を適用して、もう一度それらを結合すると、何らかの形で f(K) が得られます。
ここでの問題は、長さ len(K) の配列、たとえば Sel を取得する方法です。ここで、各行 Sel[i] は f(K[i]) が K にあるかどうかを決定します。関数 in1d とまったく同じように機能します。
それなら作るのは簡単だろう
K=K[Sel]]