Как я могу генерировать случайное значение матрицы хромосомы в питоне, сумма каждой хромосомы которой равна 1? - PullRequest
0 голосов
/ 20 мая 2019

Я хочу сгенерировать случайную матричную хромосому с максимальным значением 1,0, минимальным значением 0 и размером 10, который в каждой строке равен 1.

Я рандомизировал хромосому, используя random.uniform в матрице смаксимальное значение 1,0, минимальное значение 0 и размер 10. Как мне нужно сделать, если я хочу, чтобы каждые каждые строки равнялись 1?Спасибо.

Вход

import random
import numpy

def create_reference_solution(chromosome_length):
    reference = numpy.random.uniform(low=0, high=1.0, size=(10,chromosome_length))  # Create array chromosome
    return reference
print(create_reference_solution(4))  # print array

Выход

[[0.49610843 0.73632368 0.38089333 0.38195847]
 [0.97371743 0.8245768  0.7576383  0.69000418]
 [0.57430261 0.02274222 0.36947273 0.69866079]
 [0.89639171 0.69387191 0.23348819 0.98811965]
 [0.14153835 0.10603574 0.25907029 0.349709  ]
 [0.04914772 0.54748797 0.18464009 0.99592558]
 [0.09897709 0.71638782 0.31578413 0.15487327]
 [0.19852756 0.5675573  0.09665754 0.27815583]
 [0.9085627  0.0907393  0.0585448  0.00976053]
 [0.05092392 0.46098409 0.12467901 0.48316205]]

1 Ответ

2 голосов
/ 20 мая 2019

Вы можете создать массив случайных чисел от нуля до единицы, который на единицу меньше длины вашей хромосомы. Сортируйте список, затем найдите различия между 0 и первым, первым и вторым ... последним и 1,0. Вы можете думать об этом как о подразделениях подразделения. np.diff() удобно для этого, потому что вы можете добавить 0 и добавить 1, чтобы получить именно то, что вы хотите.

Например:

import numpy as np

chromosome_length = 4
reference = np.random.uniform(low=0, high=1.0, size=(10,chromosome_length - 1))  # Create array chromosome
reference.sort(axis = 1)

diffs = np.diff(reference, prepend=0, append=1, axis=1)
print(diffs)
np.sum(diffs, axis=1)

diffs будет примерно таким:

[[0.33912643 0.06899929 0.39308693 0.19878736]
 [0.09431517 0.1920815  0.5591725  0.15443084]
 [0.13874118 0.05951455 0.45170353 0.35004074]
 [0.07826248 0.09976879 0.27325618 0.54871255]
 [0.01879091 0.28365535 0.5275187  0.17003504]
 [0.13071614 0.60090562 0.1776917  0.09068653]
 [0.03938235 0.59978608 0.00799955 0.35283202]
 [0.14483008 0.51857752 0.31868394 0.01790846]
 [0.42866068 0.12372462 0.07070687 0.37690784]
 [0.25118504 0.10828291 0.45142439 0.18910767]]

Суммы строк:

array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...