ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Сортировка по среднему числу (https://forum.antichat.xyz/showthread.php?t=1477843)

Cyprien Lortie 21.05.2023 17:58

Есть 50 чисел (через рандом - от 0.59-0.61) на подобии:

Числа:





Код:

0.59256458282471
0.59494507312775
0.59804075956345
0.59178483486176
0.59435659646988
0.59737747907639
0.59721547365189
0.59774696826935
0.59721547365189
0.59774696826935
0.59022492170334
0.59429180622101
0.59855586290359
0.59084403514862
0.5985199213028
0.59707295894623
0.59707295894623
0.5908744931221
0.5987184047699
0.59707295894623
0.59328609704971
0.59328609704971
0.59121304750443
0.59278571605682
0.59867084026337
0.59260100126266
0.59821671247482
0.59078377485275
0.59078377485275
0.59180921316147
0.59180921316147
0.59642028808594
0.59914666414261
0.59603440761566
0.5968542098999
0.59052741527557
0.59648090600967
0.59815311431885
0.59577709436417
0.59650999307632
0.59081995487213
0.59054177999496
0.5933341383934
0.59356135129929
0.59101998806
0.59448885917664
0.59649211168289
0.59944379329681
0.59951776266098
0.59410744905472



Как создать 5 пачек по 10 чисел, чтобы общее среднее было приближено к 0.59452...

На подобии:

Цитата:

Сообщение от Спойлер

Числа в пачках не должны повторятся.

chromiusj 22.05.2023 10:33

мэйби так

Python:





Код:

import
random

target_mean
=
0.59452
# нужное сред знач
num_batches
=
5
numbers_per_batch
=
10
batches
=
[
]
for
_
in
range
(
num_batches
)
:
batch
=
random
.
sample
(
[
number
for
number
in
(
random
.
uniform
(
0.59
,
0.61
)
for
_
in
range
(
numbers_per_batch
)
)
]
,
numbers_per_batch
)
batches
.
append
(
batch
)
for
i
,
batch
in
enumerate
(
batches
)
:
batch_mean
=
sum
(
batch
)
/
numbers_per_batch
print
(
f"Пачка{i+1}:{batch}"
)
print
(
f"Среднее значение:{batch_mean:.5f}"
)
all_numbers
=
[
number
for
batch
in
batches
for
number
in
batch
]
all_mean
=
sum
(
all_numbers
)
/
(
num_batches
*
numbers_per_batch
)
print
(
f"\nОбщее среднее значение:{all_mean:.5f}"
)


Cyprien Lortie 24.05.2023 01:52

Не совсем то, нужно чтобы из всех 50 перебирались варианты максимально схожие к 0.59452. В твоем варианте, у тебя все суммируется и делится на 10. Я пробовал сделать соотношение в процентах, но там все выводится максимально криво

chromiusj 24.05.2023 02:00

можно так попробовать в принципе

Python:





[CODE]
import
itertools
import
random
def
find_combination
(
numbers
,
target_mean
,
batch_size
,
num_batches
)
:
closest_mean
=
float
(
'inf'
)
best_combination
=
None
combinations
=
itertools
.
combinations
(
numbers
,
batch_size
*
num_batches
)
for
combination
in
combinations
:
batches
=
[
combination
[
i
:
i
+
batch_size
]
for
i
in
range
(
0
,
len
(
combination
)
,
batch_size
)
]
if
len
(
set
(
number
for
batch
in
batches
for
number
in
batch
)
)
!=
len
(
numbers
)
:
continue
batch_means
=
[
sum
(
batch
)
/
len
(
batch
)
for
batch
in
batches
]
mean
=
sum
(
batch_means
)
/
len
(
batch_means
)
if
abs
(
mean
-
target_mean
)


Cyprien Lortie 24.05.2023 02:15

Мда, 50 числе маловато для более схожего среднего числа. Подумаю еще короче

Допустим увеличим кол-во цифт, не 50, а 500, а в рандоме от 0.45 до 0.9. Думаю более менее будут схожие

среднии значения

pomidorq 27.05.2023 21:09

Нужно число, приближенное к 0.59452 — сократи диапазон переменных low и high. (я сделал это за тебя)

Python:





[CODE]
import
random

low
=
0.59451
high
=
0.59453
packs_count
=
5
#Кол-во наборов
packs_len
=
10
#Кол-во чисел в наборах
arr_of_packs
=
[
{
"Набор"
:
[
]
,
"Среднее"
:
None
}
for
i
in
range
(
packs_count
)
]
def
get_medium
(
numbers
:
list
)
-
>
float
:
return
sum
(
numbers
)
/
len
(
numbers
)
def
same_number_exists
(
num
:
float
)
-
>
bool
:
for
pack
in
arr_of_packs
:
for
number
in
pack
[
"Набор"
]
:
if
number
==
num
:
return
True
return
False
def
main
(
)
-
>
None
:
for
pack
in
arr_of_packs
:
while
len
(
pack
[
"Набор"
]
)



JSON:





Код:

[
{
'Набор'
:
[
0.59452520220402
,
0.5945219346742064
,
0.5945239849441804
,
0.5945103163662672
,
0.5945210986481824
,
0.5945114726768601
,
0.5945262848796486
,
0.5945278647918683
,
0.5945235021782627
,
0.5945193742745849
]
,
'Среднее'
:
0.5945211035638082
}
,
{
'Набор'
:
[
0.5945240556983404
,
0.5945137718941468
,
0.5945122941599897
,
0.5945216126317907
,
0.59452544383679
,
0.5945250517578625
,
0.5945214341696814
,
0.5945155538840273
,
0.5945171641873448
,
0.59452555374078
]
,
'Среднее'
:
0.5945201935960753
}
,
{
'Набор'
:
[
0.5945137718816479
,
0.5945236173240422
,
0.594511161567528
,
0.5945208281928147
,
0.594522490115567
,
0.5945209929114992
,
0.5945193121482177
,
0.5945284714976264
,
0.5945104964559407
,
0.5945260185276486
]
,
'Среднее'
:
0.5945197160622533
}
,
{
'Набор'
:
[
0.5945246832697737
,
0.5945124443899157
,
0.5945272940188567
,
0.594512957197822
,
0.5945250230686927
,
0.5945216805643614
,
0.5945125045984773
,
0.5945269420601209
,
0.5945291632498761
,
0.5945261877928855
]
,
'Среднее'
:
0.5945218880210782
}
,
{
'Набор'
:
[
0.5945131859493903
,
0.5945210901150354
,
0.5945211643579503
,
0.5945115142190934
,
0.594519834856812
,
0.5945174815749449
,
0.594512097472952
,
0.5945271880099422
,
0.5945245926866556
,
0.594516279291905
]
,
'Среднее'
:
0.5945184428534682
}
]


Digger Code 28.05.2023 14:35

собрался крафтить шмотки в кс с заранее известным флоатом? купи подписку готовую, зачем ебаться самому?


Время: 06:49