Using np.random.choice can be really slow for large arrays. I recommend doing
import numpy as np
N = 100_000
booleans = np.random.rand(N) < 0.6
np.random.rand will produce uniform random numbers between 0.0 and 1.0, and the comparison will set all numbers under 0.6 to True, giving you an array with roughly 60% True values.
If you need exactly the proportion you're asking for, you can do this
k = 60 # 60%
booleans = np.zeros(shape=(N,), dtype=bool) # Array with N False
booleans[:int(k / 100 * N)] = True # Set the first k% of the elements to True
np.random.shuffle(booleans) # Shuffle the array
np.count_nonzero(booleans) # Exactly 60 000 True elements
pvalue, so you can setp=[0.4, 0.6]