>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
[3, 2, 0],
[0, 2, 1],
[1, 1, 4],
[3, 2, 2],
[0, 1, 0],
[1, 3, 1],
[0, 4, 1],
[2, 4, 2],
[3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
[1, 3, 1]])
Mettendolo insieme per un caso generale:
A[np.random.randint(A.shape[0], size=2), :]
Per non sostituzione (numpy 1.7.0+):
A[np.random.choice(A.shape[0], 2, replace=False), :]
Non credo ci sia un buon modo per generare un elenco casuale senza sostituzione prima dell'1.7. Forse puoi impostare una piccola definizione che garantisce che i due valori non siano uguali.