前提・実現したいこと
以下の様なアルゴリズムを実装したいです。
1.配列に01までのランダムな小数が入っている。1をN等分したどこに入るかを分配する。
2.配列から要素を1つ持ってくる。
3.その要素が0
(例:取り出した要素=0.598,等分数=100の時、0.59<=要素<=0.6なので59番目)
4.新たな配列を用意し、3で決まった番号の回数を1個増やす
(例:先程0.598は59番目に入るのが分かったので、新たな配列の59番目を+1する。)
5.24を最初の要素数行う。0.6の間を5等分し、0.58<=0.598<=0.6より、0.598はその中の5番目に入る)
6.4,5で作成した配列の要素を持ってくる。
7.その要素数分だけ等分し、どこに入るかを考える。
(例:59番目の配列には5個の要素があるとすると、0.59
8.7を分配後の要素の数だけ繰り返し、再等分された中に入っているかどうか割合を考える。それを更に新しい配列に順次追加する。
(例:5等分され、1,3,5番目に数が1個以上あり、2,4番目に入っていない場合,3/5となる。)
9.6~8を元々のN等分行う。
6以降の追記です。
5までで、59番目に入った配列の要素が5個、その内容を[0.5910,0.5930,0.5930,0.5960,0.5980]とします。
ここから、0.590.60に入っているこの5個の要素を更に細かく見ていくこととなります。0.60を5等分します。この5等分に先程の要素が入っているかを考えます。
再等分数は、要素が5個の為0.59
0.5910=1番目
0.5930=2番目
0.5930=2番目
0.5960=3番目
0.5980=4番目
すると、各区間に入っている数は
区間 | 要素が入っているかどうか |
---|---|
0.5900~0.5920 | ○ |
0.5921~0.5940 | ○ |
0.5941~0.5960 | ○ |
0.5961~0.5980 | ○ |
0.5981~0.6000 | × |
となります。ここから、5等分された区間の中にどの区間数が入ってるかを考えます。
今回の場合、5区間中に4区間は要素が存在しているので、最終的な出力は4/5となります。
この4/5を新しい配列の59番目に挿入します。
試したこと
5までは自力でやってみましたが、6からが分かりません。
1の配列作成は省略しています。(orbitに入っています。)
Python
1 2import numpy as np 3import math 4 5 N=100 #N:等分数。 6 7 for i in range(len(orbit)): 8 temporary = 0 9 temporary = orbit[i] 10 temporary = abs(math.floor(temporary*N)) 11 pdcount[temporary] = pdcount[temporary]+1
3の補足ですが、取り出した点をN倍し、小数を切り落としすればそのまま分配先の番号になることを利用しています。
(例:0.598,N=100の時、0.598*100=59.8,つまり59となり、pdcount[59]の要素を+1している。)
補足情報(FW/ツールのバージョンなど)
Python 3.94
回答5件
あなたの回答
tips
プレビュー