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.
JavaScript
x
17
17
1
import random as rd
2
import pandas as pd
3
4
N = 1000000 # number of rows/number of draws (try N=1000)
5
M = 100000 # range to sample from
6
K = 3 # size of each sample
7
# note: K<=M
8
numbers = pd.DataFrame(columns=['A', 'B', 'C'], index=range(N))
9
for i in range(N):
10
numbers.iloc[i,:] = rd.sample(range(M),K)
11
12
# duration in seconds (M=100)
13
# N 1000 10.000 100.000 1.000.000
14
# method in question 2.2 3.3 13 99
15
# method by Nin17, 0.0085 0.1 0.57 5.6
16
# i.e. list comprehension [rd.sample(range(M),K) for _ in range(N)]
17
Advertisement
Answer
List comprehension is faster if N, M and K are large:
JavaScript
1
2
1
numbers = [rd.sample(range(M), K) for _ in range(N)]
2