前提・実現したいこと
確率を表す配列a(indexが試行回数、columnが要素)に対して、並び替えた後に20パーセンタイル以下を落とす処理を行い、それを元の順に並び替えたい。
確率のweight配列の20 percentile以下をsortせずに落とせる場合はそちらの方法も知りたいです。
python
1a = np.array([[0.1,0.2,0.4,0.3], [0.5,0.01,0.1,0.39]]) 2b = np.sort(a, axis=1) 3c = np.argsort(a, axis=1) 4b_new = cut20percentile(b) #累積が0.2までの項目を0に落とす 5""" 6追記:現状は下記のような処理を考えています。 7確率に占める重要な要素をピックアップする(微小要素を除去する)ため、 8index方向に昇順に逐次累積を行い、閾値以下をカットします。 9目的はsklearnのPCAのweight_で要素数をカットする処理のようなイメージです。 10 11def cut20percentile_each(x): 12 percentile = 0 13 for i in range(x.shape[0]): 14 percentile+=x[i] 15 if percentile < 0.2: 16 x[i] = 0 17 return x 18def cut20percentile(x): 19 return [cut20percentile_each(x[i]) for i in range(x.shape[0])] 20cut20percentile(b) 21>>[array([0. , 0.2, 0.3, 0.4]), array([0. , 0. , 0.39, 0.5 ])] 22 23"""
試したこと&発生している問題
2行目がうまくソートが戻らない
python
1print(b) 2>> [[0.1 0.2 0.3 0.4 ] 3 [0.01 0.1 0.39 0.5 ]] 4print(c) 5>> [[0 1 3 2] 6 [1 2 3 0]] 7[b[x, c[x,:]] for x in range(b.shape[0])] 8>> [array([0.1, 0.2, 0.4, 0.3]), array([0.1 , 0.39, 0.5 , 0.01])]
補足情報
python3.6
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー