随机将数据分成n组吗?

时间:2019-07-06 11:51:36

标签: python numpy data-structures

我目前正在尝试编写代码,以将给定的数据分为多个组。

应随机创建组,并且应将整个数据包含在一起。

因此,我们假设存在一个数组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)?

谢谢!

狮子座

1 个答案:

答案 0 :(得分:0)

尽管不太优雅,但以下代码将数组扩展为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是元素数。