title: From a 2D array, create 2nd 2D array of Unique(non-repeated) random selected values from 1st array (values not shared among rows) without using a loop
body: <p>This is a follow up on this question. </p>
  
  <p><a href="https://stackoverflow.com/questions/53981752/from-a-2d-array-create-another-2d-array-composed-of-randomly-selected-values-fr">From a 2d array, create another 2d array composed of randomly selected values from original array (values not shared among rows) without using a loop</a></p>
  
  <p>I am looking for a way to create a 2D array whose rows are randomly selected unique values (non-repeating) from another row, without using a loop. </p>
  
  <p>Here is a way to do it With using a loop. </p>
  
  <pre><code>pool =  np.random.randint(0, 30, size=[4,5])
  seln = np.empty([4,3], int)
  
  for i in range(0, pool.shape[0]):
      seln[i] =np.random.choice(pool[i], 3, replace=False) 
  
  print('pool = ', pool)
  print('seln = ', seln)
  
  &gt;pool =  [[ 1 11 29  4 13]
   [29  1  2  3 24]
   [ 0 25 17  2 14]
   [20 22 18  9 29]]
  seln =  [[ 8 12  0]
   [ 4 19 13]
   [ 8 15 24]
   [12 12 19]]
  </code></pre>
  
  <p>Here is a method that does not uses a loop, however, it can select the same value multiple times in each row. </p>
  
  <pre><code>pool =  np.random.randint(0, 30, size=[4,5])
  print(pool)
  array([[ 4, 18,  0, 15,  9],
         [ 0,  9, 21, 26,  9],
         [16, 28, 11, 19, 24],
         [20,  6, 13,  2, 27]])
  
  # New array shape
  new_shape = (pool.shape[0],3)
  
  # Indices where to randomly choose from
  ix = np.random.choice(pool.shape[1], new_shape)
  array([[0, 3, 3],
         [1, 1, 4],
         [2, 4, 4],
         [1, 2, 1]])
  
  ixs = (ix.T + range(0,np.prod(pool.shape),pool.shape[1])).T
  array([[ 0,  3,  3],
         [ 6,  6,  9],
         [12, 14, 14],
         [16, 17, 16]])
  
  pool.flatten()[ixs].reshape(new_shape)
  array([[ 4, 15, 15],
         [ 9,  9,  9],
         [11, 24, 24],
         [ 6, 13,  6]]) 
  </code></pre>
  
  <p>I am looking for a method that does not use a loop, and if a particular value from a row is selected, that value can Not be selected again. </p>