Вы можете создать массив случайных чисел от нуля до единицы, который на единицу меньше длины вашей хромосомы. Сортируйте список, затем найдите различия между 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.])