случайно разбить данные на n групп? - PullRequest
0 голосов
/ 06 июля 2019

В настоящее время я пытаюсь написать код для разбиения данных на несколько групп.

Группы должны создаваться случайным образом, и они должны охватывать вместе все данные.

Итак, давайте предположим, что есть массив A, например. shape = (3, 3, 3) с 27 корневыми элементами e:

array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

Я хочу создать n группы, так что g1 & g2 & ... & gn будет "складываться" в исходный массив A.

Я перетасовал A следующим образом

def shuffle(array):

    shuf = array.ravel()
    np.random.shuffle(shuf)

    return np.reshape(shuf, array.shape)

Но как мне создать n групп (n < e) случайным образом?

Спасибо!

Leo

1 Ответ

0 голосов
/ 06 июля 2019

Хотя это и не так элегантно, следующий код будет распределять массив по n группам, гарантируя, что в каждой группе будет хотя бы один элемент, и распределять остальные случайным образом.

import numpy as np

def shuffle_and_group(array, n):
    shuf = array.ravel()
    np.random.shuffle(shuf)
    shuf = list(shuf)

    groups = []
    for i in range(n):  # ensuring no empty group
        groups.append([shuf.pop()])

    for num in shuf:  # spread the remaining
        groups[np.random.randint(n)].append(num)
    return groups

array = np.arange(15)
print(shuffle_and_group(array, 9))

В случае, если вы беспокоитесь о временикод будет иметь временную сложность O (e), где e - количество элементов.

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