Пример
data = np.array([[1, 3, 8, np.nan], [np.nan, 6, 7, 9], [np.nan, 0, 1, 2], [5, np.nan, np.nan, 2]])
n = 5
Получить действительные индексы
y_val, x_val = np.where(~np.isnan(data))
n_val = y_val.size
Выбрать случайное подмножество размера n
по индексу
pick = np.random.choice(n_val, n)
Применить индекс к действительным координатам
y_pick, x_pick = y_val[pick], x_val[pick]
Получить соответствующие данные
data_pick = data[y_pick, x_pick]
Полюбоваться
data_pick
# array([2., 8., 1., 1., 2.])
y_pick
# array([3, 0, 0, 2, 3])
x_pick
# array([3, 2, 0, 2, 3])