Сгенерируйте массив случайных поплавков, суммирующих 1, фиксируя несколько элементов (верхнюю границу, Нижнюю границу и/или фиксированную) в python,

#python #arrays

Вопрос:

У меня есть что-то вроде ниже:

 random_array = np.random.random(10)
scaled_array = random_array/np.sum(random_array)
 

Это дает мне хороший массив со случайными поплавками, сумма которых равна 1. Тем не менее, я пытаюсь сделать этот шаг дальше и сделать следующее:

Например, зафиксируйте 2-й и 5-й элементы равными 0,04 и 0,09 соответственно, а все остальные элементы генерируйте случайным образом. Но сумма всего массива все равно должна быть ровно 1.

Сделав еще один шаг, я хочу указать верхнюю (нижнюю) границу для всех/каждого элемента(ов). Например, я все еще хочу, чтобы 4-й элемент был равен 0,09, но ТАКЖЕ хочу, чтобы ВСЕ элементы были МЕНЬШЕ 0,1. (Они все равно будут складываться до 1, потому что у меня более 10 элементов.)

Или даже иногда я хочу указать ТОЛЬКО верхнюю/нижнюю границу БЕЗ какой-либо фиксированной константы для всех элементов массива.

Как я могу этого достичь?

Комментарии:

1. Первый «шаг» прост, так как у вас просто есть новая сумма для ваших случайных элементов (то, что осталось после фиксированных битов).