So führen Sie eine Neuabtastung eines Datensatzes durch, um eine gleichmäßige Verteilung zu erreichenPython

Python-Programme
Anonymous
 So führen Sie eine Neuabtastung eines Datensatzes durch, um eine gleichmäßige Verteilung zu erreichen

Post by Anonymous »

Ich habe einen Datensatz mit einem Schema wie:

Code: Select all

df = pl.DataFrame(
{
"target": [
[1.0, 1.0, 0.0],
[1.0, 1.0, 0.1],
[1.0, 1.0, 0.2],
[1.0, 1.0, 0.8],
[1.0, 1.0, 0.9],
[1.0, 1.0, 1.0],
],
"feature": ["a", "b", "c", "d", "e", "f"],
},
schema={
"target": pl.Array(pl.Float32, 3),
"feature": pl.String,
},
)
Wenn ich ein Histogramm der Ziel-z-Werte erstelle, sieht es so aus:
Image
Ich möchte die Daten erneut abtasten, sodass sie flach entlang z liegen.
Ich habe es auf eine knifflige Weise mit vielen Schritten geschafft (auch sehr langsam). Ich habe mich gefragt, ob die Leute einen saubereren (und effizienteren) Weg vorschlagen könnten?
Was ich mache ist:
  • Finden Sie die Bin-Kanten des besagten Histogramms:

Code: Select all

bins = 2 # Use e.g. 100 or larger in reality
z = df.select(z=pl.col("target").arr.get(2))
z_min = z.min()
z_max = z.max()
breaks = np.linspace(z_min, z_max, num=bins+1)
  • Finden Sie heraus, wie viele Zählungen sich im Behälter mit den wenigsten Zählungen befinden:

Code: Select all

counts = (
df.with_columns(bin=pl.col("target").arr.get(2).cut(breaks))
.with_columns(counter=pl.int_range(pl.len()).over("bin"))
.group_by("bin")
.agg(pl.col("counter").max())
.filter(pl.col("counter") > 0)  #

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post