Если я создаю гистограмму значений target-z, это будет выглядеть так:
Я хочу выполнить повторную выборку данных, чтобы они были плоскими по z.
Мне удалось сделать это хакерским многошаговым способом (тоже очень медленно). Мне было интересно, могут ли люди предложить более чистый (и более эффективный) способ?
Я делаю следующее:
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)
Определите, сколько счетчиков находится в корзине с наименьшим количеством счетчиков:
У меня есть набор данных со схемой типа: [code]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, }, ) [/code] Если я создаю гистограмму значений target-z, это будет выглядеть так: [img]https://i.sstatic.net/0bMhF5HC.png[/img] Я хочу выполнить повторную выборку данных, чтобы они были плоскими по z. Мне удалось сделать это хакерским многошаговым способом (тоже очень медленно). Мне было интересно, могут ли люди предложить более чистый (и более эффективный) способ? Я делаю следующее: [list] [*]Нахожу края интервала указанной гистограммы: [/list] [code]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) [/code] [list] [*]Определите, сколько счетчиков находится в корзине с наименьшим количеством счетчиков: [/list] [code]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) #