python中子阵上的置换

2024-04-25 13:39:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

可能的结果是

^{pr2}$

最后,我希望能够生成许多这样的任务列表,并有效地这样做。我当前的方法是创建一个零数组,并将长度为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)

有更好/更快的方法吗?在


Tags: 方法innumpy列表for排序zerosrange
1条回答
网友
1楼 · 发布于 2024-04-25 13:39:13

我可以考虑两件事:

  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])...)。每次你只需要从中随机选取一个数组。

相关问题 更多 >