numpy 生成数组的排列

vatpfxk5  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(130)

我想生成一个数组列表(任意长度),每个数组都是数组A的随机排列。this question

for x in range(n):
    random.shuffle(A)
    routes.append(A)

如何有效地使用NumPy?

eufgjt7s

eufgjt7s1#

请考虑以下示例:

In [59]: crr
Out[59]: 
array([[0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938]])

In [60]: np.random.shuffle(crr[0])

In [61]: crr
Out[61]: 
array([[0.42109715, 0.50779425, 0.93753455, 0.11773652, 0.08751938,
        0.83704624],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938]])

由于随机 Shuffle 是就地进行的,因此我们可以只指定要 Shuffle 的第一行。因此,如果您使用np.repeatnp.tile重复N次A,并将结果整形为2D数组,如crr,您可以这样做以达到最终目标:

In [69]: for v in crr:
    ...:     np.random.shuffle(v)
w6lpcovy

w6lpcovy2#

np.random.permutation怎么样?举例来说:

A = np.array([0, 1, 2, 3, 4])
n = 17  # list length
x = [np.random.permutation(A)  for i in range(n)]

我不认为可以避免在n迭代中循环的过程方面,但如上面的代码片段所示:

  • 使用np.random.permutation以避免使用random
  • 使用列表解析避免多行循环

相关问题