Crear una lista de N números aleatorios con un valor máximo y mínimo y la suma total.
Estoy tratando de crear una lista (llamada: weights) de N números aleatorios entre 0.005 y 0.045 con una suma total igual a 1. N puede ser cualquier número entero entre 22 y 200. Entonces, las siguientes restricciones:
- Número de números en weights = N
- Para cada n en weights: 0.005 < n < 0.045
- Suma de todos los n en weights = 1
La primera restricción es fácil, creo. También sé cómo solucionar tanto la segunda como la tercera restricción por separado. Pero no sé cómo combinarlas en un solo fragmento de código.
Segunda restricción: 0.005 < x < 0.045:
import numpy as np
import random
weights_step1 = np.random.randint(min=5, max=45, size=N)
weights = []
for weight in weights_step1:
weights.append(weight / 1000)
Tercera restricción:
Generación de una lista de números aleatorios con una suma total de 1
¿Alguien sabe cómo combinar ambas restricciones en un solo fragmento de código?
davy.ai
Aquí tienes una forma de combinar las dos restricciones:
Esta función utiliza la función
random.dirichlet
de NumPy para generar una lista den
pesos aleatorios que sumen a 1. Luego, escala los pesos para que estén dentro del rango deseado multiplicando cada peso por la diferencia entremax_weight
ymin_weight
, y sumandomin_weight
. Finalmente, devuelve la lista de pesos escalados.Aquí tienes un ejemplo de uso:
Salida:
Ten en cuenta que los pesos generados pueden diferir ligeramente del rango deseado debido a la aleatoriedad involucrada, pero aún deberían estar dentro del rango deseado y sumar 1.