У меня есть очень большой 2D-массив, который выглядит примерно так:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Используя numpy, существует ли простой способ получить новый 2D-массив, например, с 2 случайными строками из исходного массива a
(без замены)?
например
b=
[[a4, b4, c4],
[a99, b99, c99]]
Ответы:
Собираем это вместе для общего случая:
Для замены (NumPy 1.7.0+):
Я не верю, что есть хороший способ создать случайный список без замены до 1.7. Возможно, вы можете установить небольшое определение, которое гарантирует, что два значения не совпадают.
источник
np.random.choice
и наnp.random.permutation(A.shape[0])[:2]
самом деле, не очень хороший, но это то , что сейчасnp.random.choice
... или если вы не хотите менять свой массив в место,np.random.shuffle
Это старый пост, но это то, что лучше всего работает для меня:
измените replace = False на True, чтобы получить то же самое, но с заменой.
источник
replace=False
параметрchoice
.Другой вариант - создать случайную маску, если вы просто хотите уменьшить выборку данных по определенному коэффициенту. Скажем, я хочу уменьшить выборку до 25% моего исходного набора данных, который в настоящее время содержится в массиве
data_arr
:Теперь вы можете вызывать
data_arr[mask]
и возвращать ~ 25% строк, выбранных случайным образом.источник
replace = False
если вы не хотите проб с заменой.data_arr
. В моем примере будет случайным ~ 25% позиций,True
и эти позиции будут выбраныdata_arr
.Это ответ, аналогичный предоставленному Хези Рашеффом, но упрощенный, чтобы новые пользователи Python понимали, что происходит (я заметил, что многие новые студенты, изучающие данные, выбирают случайные выборки самым странным образом, потому что они не знают, что делают в Python).
Вы можете получить несколько случайных индексов из вашего массива, используя:
Затем вы можете использовать нарезку с вашим массивом numpy, чтобы получить образцы по этим индексам:
Это даст вам указанное количество случайных выборок из ваших данных.
источник
Я вижу, что перестановка была предложена. Фактически это можно сделать одной строкой:
источник
Если вам нужны те же строки, но только случайная выборка,
Здесь x, должно быть «int», определяющим количество строк, которые вы хотите выбрать случайным образом.
источник
old_array
это последовательность или набор, а не пустой массив [ссылка] ( docs.python.org/3/library/random.html#functions-for-sequence )Если вы хотите создать несколько случайных подмножеств строк, например, если вы выполняете RANSAC.
источник