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