Home > Blockchain >  print multiple random permutations
print multiple random permutations

Time:05-21

I am trying to do multiple permutations. From code:

# 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)

But now I would like to generate, for example, 20 permutations (of values). With code:

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

I can only observe one permutation (or "manually" get others). I wish I had many permutations (20 or more) and so automatically calculate the Durbin-Watson statistic for each permutation (from values).

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

How can I do?

CodePudding user response:

To get 20 permutations out of some collection, intialize the itertools.permutations iterator and then use next() to take the first twenty:

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)]

Of course, these won't be random permutations (i.e., they are calculated in an organized manner, try with it.permutations("abcdef") and you'll see what I mean). If you need random permutations, you can use np.random.permutation much in the same way:

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

To then calculate the Durbin Watson statistic:

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