python中子阵列的排列

dun*_*tom 5 python arrays permutation

我有一组标识符已分组为三个.对于每个组,我想将它们随机分配给三组中的一组,并将这些分配存储在另一个数组中.因此,对于给定的分组标识符数组(我预先分配它们):

groupings = array([1,1,1,2,2,2,3,3,3])
Run Code Online (Sandbox Code Playgroud)

可能的输出是

assignments = array([0,1,2,1,0,2,2,0,1])
Run Code Online (Sandbox Code Playgroud)

最后,我希望能够生成许多这些分配列表并有效地完成.我当前的方法只是创建一个零数组,并将每个长度为3的连续子数组设置为3的随机排列.

assignment = numpy.zeros((12,10),dtype=int)
for i in range(0,12,3):
    for j in range(10):
        assignment[i:i+3,j] = numpy.random.permutation(3)
Run Code Online (Sandbox Code Playgroud)

有更好/更快的方式吗?

sta*_*yli 5

我能想到的两件事:

  1. 而不是访问3 row * 1 column内循环中的2D数组,尝试访问它1*3.首先水平访问2D数组通常比垂直首先快,因为它为您提供了更好的空间局部性,这对于缓存很有用.

  2. 而不是numpy.random.permutation(3)每次运行,如果3是固定的并且是一个小数字,请尝试预先生成排列数组并将它们保存到数组的常量数组中,如:(array([0,1,2]), array([0,2,1]), array([1,0,2])...).您只需要每次从中随机选择一个数组.