数列を許容範囲でグループ化(分割)する方法を教えて下さい。
例
input 数列 {1, 2, 2.01, 3} と 許容誤差(範囲)=0.1
output {1} {2, 2.01} {3}
①タイトルで意味が通じますか?正式名称があれば教えて下さい。検索語が思いつきませんでした。
②outputを、区切り1.5と2.5(2.8でも可)にする予定です。
③特に言語にこだわりません。おすすめのページがあれば教えて下さい。
よろしくお願いします。
2018ー10ー10ーーー
仕様が不十分でした。
「以上」、「四捨五入」は、想定していません。
区切りの意味について、
最初の区切りは、グループ1の最後の値とグループ2の最初の値の平均=(1+2)/2=1.5
次 の区切りは、グループ2の最後の値とグループ3の最初の値の平均=(2.01+3)/2=2.505
以下同文
import numpy as np
maxgap=0.1
a = np.array([1, 2, 2.01, 3])
d = a[1:] - a[:-1]
i = np.where(d > maxgap)[0]
output = (a[i] + a[i+1])/2
print(a)
print(output)
# [1. 2. 2.01 3. ]
# [1.5 2.505]-----------できました。
例2
数列の差で0.1がある時、次のようになると思います。
input 数列{1.0, 1.05, 1.2, 1.3, 2.0, 3.0}と許容誤差(範囲)=0.1
output {1.0,1.05} {1.2} {1.3} {2.0} {3.0}
区切り 1.125,1.25,1.65,2.5
import numpy as np
maxgap=0.1
a = np.array({1.0, 1.05, 1.2, 1.3, 2.0, 3.0})
d = a[1:] - a[:-1]
i = np.where(d > maxgap)[0]
output = (a[i] + a[i+1])/2
print(a)
print(output)
# File "C:/Users/xxx/.PyCharmCE2018.2/config/scratches/scratch_29.py", line 27, in <module>
# d = a[1:] - a[:-1]
# IndexError: too many indices for array
すみません。ループの使い方を教えて下さい。
よろしくお願いします。
cluster analysisやyieldやCausal Clusteringについては、これから勉強したいと思います。
2018-10-12----------------------------------------------------------------
「許容誤差(範囲)」という表現が間違っていました。「次の値との差」の意味でした。
仕様
「小さい順の数列で、次の値との差が、0.1以上の時に区切る。
区切る値は、次の値との平均とする。」
同じ仕様?
「小さい順の数列で、次の値との平均値との差が、0.05(=0.1/2)以上の時に区切る。」
その平均値を区切る値とする。」
この場合のグループ分けはどうするのでしょうか。
input 数列{1, 1.06, 1.12}と「次の値との離れ」=0.1
output {1, 1.06, 1.12}
グループ分けなし(分割なし)
1.06-1 =0.06 < 0.1 区切らない
1.12-1.06=0.06 < 0.1 区切らない
確かに、連続したらグループ分けなし(分割なし)があります。
大きな離れと小さな離れで、グループ分けを想像していました。
等間隔を想定していませんでした。その時は、0.1を小さくします。
「maxgap?」ピンときませんね。