次のシナリオがあります。
value_range = [250.0, 350.0]
precision = 0.01
unique_values = len(np.arange(min(values_range),
max(values_range) + precision,
precision))
これは、すべての値が250.0から350.0の範囲で、精度が0.01であることを意味し、データセットが持つことができる潜在的な合計10001の一意の値を提供します。
# This is the data I'd like to scale
values_to_scale = np.arange(min(value_range),
max(value_range) + precision,
precision)
# These are the bins I want to assign to
unique_bins = np.arange(1, unique_values + 1)
上記の例でわかるように、の各値values_to_scale
は、unique_bins
配列内の対応するアイテムに正確にマップされます。つまり、250.0(values_to_scale[0]
)の値は1.0(unique_bins[0]
)などに等しくなります。
ただし、私のvalues_to_scale
配列が次のようになっている場合:
values_to_scale = np.array((250.66, 342.02))
一意のビン値を取得するためにスケーリング/変換を行うにはどうすればよいですか?つまり、250.66は66の値に等しいはずですが、これを取得するにはどうすればよいですか?
注:value_range
は-1から1の間で等しくなる可能性があります。私は、2つの値の間でデータをスケーリング/正規化する一般的な方法を探しています。
あなたは基本的にmin
との間の線形補間を探していますmax
:
minv = min(value_range)
maxv = max(value_range)
unique_values = int(((maxv - minv) / precision) + 1)
((values_to_scale - minv) / (maxv + precision - minv) * unique_values).astype(int)
# array([ 65, 9202])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加