Ich möchte eine Funktion erstellen, die Zahlen innerhalb eines Bereichs [0,1] in eine Bin platziert, wobei n die Anzahl der Bins und die Grenzen relativ zum Mittelpunkt definiert sind .Python Bins/Numpy Digitize - Erstellen von Bins vom Mittelpunkt
0.0 >= Bin 1 <= 0.2 <- outer left bin
0.2 > Bin 2 <= 0.4
0.4 > Bin 3 < 0.6 <- middle bin
0.6 >= Bin 4 < 0.8
0.8 >= Bin 5 <= 1 <- outer right bin
Ich dachte, ich wäre in der Lage, Folgendes zu tun: für
def fractile(x, n):
bins = np.linspace(0.0, 1.0, n+1)
return np.where(x > 0.5,
np.digitize(x, bins, right=False),
np.digitize(x, bins, right=True))
x = pd.DataFrame(np.linspace(0.05, 0.95, 19))
f = fractile(x, 10)
Ergebnis n = 10:
array([[ 1],
[ 1],
[ 2],
[ 2],
[ 3],
[ 3],
[ 4],
[ 4],
[ 5],
[ 5],
[ 6],
[ 6],
[ 7],
[ 7],
[ 8],
[ 8],
[ 9],
[10],
[10]], dtype=int64)
Ich erwarte von der Mitte sein, die kleinste ist zu sein, aber erhalten unerwartete Ergebnisse ...
Mit Bezug auf Pauls Antwort unten könnte die Funktion zu runden vor der Auswertung und t ändern herefore mildern die Gleitkomma-Arithmetik Problem scheint aber hässlich:
def fractile(x, n):
x = np.round(x, 15)
bins = np.round(np.linspace(0.0, 1.0, n+1), 15)
return np.where(x > 0.5,
np.digitize(x, bins, right=False),
np.digitize(x, bins, right=True))
Irgendwelche Vorschläge/Zeiger geschätzt!
Interessant und nervig! Es wurde versucht, die Funktion fructile() auf eine akzeptable Genauigkeit zu runden, aber nicht ideal. Bearbeitete Frage zum Nachdenken. – user2579685