Numpy: получить случайный набор строк из 2D массива
у меня есть очень большой 2D массив, который выглядит примерно так:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
используя numpy, есть ли простой способ получить новый 2D-массив, например, с 2 случайными строками из исходного массива a (без замены)?
например
b=
[[a4, b4, c4],
[a99, b99, c99]]
4 ответов:
>>> 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]])собирая его вместе для общего случая:
A[np.random.randint(A.shape[0], size=2), :]для не замены (numpy 1.7.0+):
A[np.random.choice(A.shape[0], 2, replace=False), :]Я не считаю, что есть хороший способ генерировать случайный список без замены до 1.7. Возможно, вы можете настроить небольшое определение, которое гарантирует, что эти два значения не совпадают.
Это старый пост, но это то, что работает лучше для меня:
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]измените replace=False на True, чтобы получить то же самое, но с заменой.
другой вариант-создать случайную маску, если вы просто хотите уменьшить выборку данных по определенным коэффициентом. Скажем, я хочу уменьшить выборку до 25% от моего исходного набора данных, который в настоящее время хранится в массиве
data_arr:# generate random boolean mask the length of data # use p 0.75 for False and 0.25 for True mask = numpy.random.choice([False, True], len(data_arr), p=[0.75, 0.25])Теперь вы можете звонить
data_arr[mask]и возвращают ~25% строк, случайно выбранных.
Если вам нужны те же строки, но только случайная выборка, то,
import random new_array = random.sample(old_array,x)здесь x, должен быть' int', определяющий количество строк, которые вы хотите случайным образом выбрать.
Comments