numpy.random.choice does not give unique indices. It sometimes repeats. So, if you want unique indices, go with approach 1 or approach 3. Have a look at the following example:
>>> b=np.array([1,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1])
>>> f=np.where(b==1)[0]
>>> f
array([ 0, 4, 5, 6, 9, 10, 11, 13, 14, 15, 16, 17, 18, 29, 30, 33, 34],
dtype=int64)
>>> np.random.choice(f,10)
array([16, 33, 29, 4, 11, 34, 17, 10, 18, 9], dtype=int64)
>>> np.random.choice(f,12)
array([13, 13, 10, 4, 33, 33, 9, 18, 14, 17, 17, 4], dtype=int64)