Skip to content
Advertisement

generate matrix of random integers unique per row in python

Is there a way to directly sample a matrix of random integers that are unique on each row? Doing this for each row apart can be slow.

import random as rd
import pandas as pd

N = 1000000 # number of rows/number of draws (try N=1000)
M = 100000  # range to sample from
K = 3       # size of each sample
# note: K<=M
numbers = pd.DataFrame(columns=['A', 'B', 'C'], index=range(N))
for i in range(N):
    numbers.iloc[i,:] = rd.sample(range(M),K)

#  duration in seconds (M=100)
#  N                    1000     10.000   100.000  1.000.000
#  method in question   2.2       3.3         13         99
#  method by Nin17,     0.0085    0.1       0.57        5.6
#  i.e. list comprehension [rd.sample(range(M),K) for _ in range(N)] 

Advertisement

Answer

List comprehension is faster if N, M and K are large:

numbers = [rd.sample(range(M), K) for _ in range(N)]
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement