Pythonでは、次のようなリストがあります。
a = [1, 2, 3, 4, 5]
リストは常にソートされます。重みが値 0 と 1 の間だけになるように、値に重みを割り当てたいと思います。最大値の重みは 1 になります。つまり、この例では、5 の重みは 1 になります。
ただし、1 の重みは 0 ではありません (0 は特別であり、含まれません)。他のすべての重みは、最大数の一部の値にする必要があります。この問題にアプローチする最善の方法が何であるかはわかりません。
Pythonでは、次のようなリストがあります。
a = [1, 2, 3, 4, 5]
リストは常にソートされます。重みが値 0 と 1 の間だけになるように、値に重みを割り当てたいと思います。最大値の重みは 1 になります。つまり、この例では、5 の重みは 1 になります。
ただし、1 の重みは 0 ではありません (0 は特別であり、含まれません)。他のすべての重みは、最大数の一部の値にする必要があります。この問題にアプローチする最善の方法が何であるかはわかりません。
最初に最大値を見つけます。データはソートされているため、それが最後の値になります。次に、残りをその値で割ります。
from __future__ import division
maxval = a[-1]
weights = [elem / maxval for elem in a]
デモ:
>>> maxval = a[-1]
>>> [elem / maxval for elem in a]
[0.2, 0.4, 0.6, 0.8, 1.0]
インポートにより、from __future__ import division
整数除算ではなく、浮動小数点除算が確実に使用されます。別の方法は、 を使用することmaxval = float(a[-1])
です。
def makeWeightedList(list_):
max_ = max(list_)
newList = list(map(lambda value: value / max_, list_))
return newList
ところで、これはリストがソートされていなくても機能します。リストが常に (昇順 (または非降順) で) 並べ替えられていることに本当に依存できる場合、最大値は常に最後の要素になるため、2 行目は次のようになります。
max_ = list_[-1]
パフォーマンスが向上します。