【问题标题】:Permutations over subarray in pythonpython中子数组的排列
【发布时间】:2015-10-26 22:43:33
【问题描述】:

我有一组标识符,它们被分成三组。对于每个组,我想将它们随机分配到三组中的一组,并将这些分配存储在另一个数组中。因此,对于给定的分组标识符数组(我对它们进行了预排序):

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

可能的输出是

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

最终,我希望能够生成许多这样的分配列表并高效地执行此操作。我目前的方法只是创建一个 zeroes 数组并将每个长度为 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)

有没有更好/更快的方法?

【问题讨论】:

  • 所以我知道'10'是一个你想要更大的虚拟示例值。那么“12”呢,它也是一个虚拟值还是永远是 12?
  • 它也是一个虚拟值。实际上,就我而言,它更接近 12k。

标签: python arrays permutation


【解决方案1】:

我能想到两件事:

  1. 不要在你的内部循环中访问二维数组3 row * 1 column,而是尝试访问它1*3。先水平访问二维数组通常比先垂直访问快,因为它可以提供更好的空间局部性,这有利于缓存。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多