我目前正在尝试编写代码,以将给定的数据分为多个组。
应随机创建组,并且应将整个数据包含在一起。
因此,我们假设存在一个数组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
)?
谢谢!
狮子座
答案 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是元素数。