打印多个随机排列

print multiple random permutations

我正在尝试进行多重排列。来自代码:

# generate random Gaussian values
from numpy.random import seed
from numpy.random import randn
# seed random number generator
seed(1)
# generate some Gaussian values
values = randn(100)
print(values)

但是现在我想生成例如 20 个(值)排列。 使用代码:

import numpy as np
import random
from itertools import permutations
result = np.random.permutation(values)
print(result)

我只能观察到一种排列(或“手动”获取其他排列)。我希望我有很多排列(20 个或更多)并自动计算每个排列的 Durbin-Watson 统计量(从值)。

from statsmodels.stats.stattools import durbin_watson
sm.stats.durbin_watson(np.random.permutation(values))

我该怎么办?

要从某个集合中获得 20 个排列,请初始化 itertools.permutations 迭代器,然后使用 next() 获取前二十个:

import numpy as np
import itertools as it

x = np.random.random(100)  # 100 random floats
p = it.permutations(x)  # an iterator which produces permutations (DON'T TRY TO CALCULATE ALL OF THEM)
first_twenty_permutations = [next(p) for _ in range(20)]

当然,这些不会是随机排列(即,它们是以有组织的方式计算的,尝试使用 it.permutations("abcdef"),您就会明白我的意思)。如果你需要随机排列,你可以用同样的方式使用 np.random.permutation

[np.random.permutation(x) for _ in range(20)]

然后计算 Durbin Watson 统计数据:

permutations = np.array([np.random.permutation(x) for _ in range(20)])
np.apply_along_axis(durbin_watson, axis=1, arr=permutations)