python中子阵列的排列

时间:2015-10-26 22:43:33

标签: python arrays permutation

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

groupings = array([1,1,1,2,2,2,3,3,3])

可能的输出是

assignments = array([0,1,2,1,0,2,2,0,1])

最终,我希望能够生成许多这些分配列表并有效地完成。我当前的方法只是创建一个零数组并将每个长度为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)

有更好/更快的方式吗?

1 个答案:

答案 0 :(得分:5)

我能想到的两件事:

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

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