Saya memiliki array 2D yang sangat besar yang terlihat seperti ini:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Menggunakan numpy, apakah ada cara mudah untuk mendapatkan array 2D baru dengan, misalnya, 2 baris acak dari array awal a
(tanpa penggantian)?
misalnya
b=
[[a4, b4, c4],
[a99, b99, c99]]
Jawaban:
Menyatukannya untuk kasus umum:
Untuk yang bukan pengganti (numpy 1.7.0+):
Saya tidak percaya ada cara yang baik untuk menghasilkan daftar acak tanpa penggantian sebelum 1,7. Mungkin Anda dapat mengatur definisi kecil yang memastikan kedua nilai tidak sama.
sumber
np.random.choice
, dan itunp.random.permutation(A.shape[0])[:2]
, sebenarnya tidak bagus, tapi itulah yangnp.random.choice
saat ini ... atau jika Anda tidak peduli untuk mengubah array Anda di- tempat,np.random.shuffle
Ini adalah pos lama, tetapi inilah yang paling cocok untuk saya:
ganti ganti = Salah ke Benar untuk mendapatkan hal yang sama, tetapi dengan penggantian.
sumber
replace=False
param yang ditambahkan kechoice
.Pilihan lain adalah membuat topeng acak jika Anda hanya ingin mengambil sampel data Anda dengan faktor tertentu. Katakanlah saya ingin mengambil sampel hingga 25% dari kumpulan data asli saya, yang saat ini disimpan dalam array
data_arr
:Sekarang Anda dapat menelepon
data_arr[mask]
dan mengembalikan ~ 25% dari baris, yang diambil secara acak.sumber
replace = False
jika Anda tidak ingin pengambilan sampel dengan penggantian.data_arr
. Dalam contoh saya, acak ~ 25% dari posisi akanTrue
dan posisi tersebut diambil dari sampeldata_arr
.Ini adalah jawaban yang mirip dengan yang Hezi Rasheff berikan, tetapi disederhanakan sehingga pengguna python yang lebih baru memahami apa yang terjadi (saya melihat banyak siswa ilmu data baru mengambil sampel acak dengan cara yang paling aneh karena mereka tidak tahu apa yang mereka lakukan dengan python).
Anda bisa mendapatkan sejumlah indeks acak dari array Anda dengan menggunakan:
Anda kemudian dapat menggunakan slicing dengan array numpy Anda untuk mendapatkan sampel di indeks tersebut:
Ini akan memberi Anda jumlah sampel acak yang ditentukan dari data Anda.
sumber
Saya melihat permutasi telah disarankan. Bahkan dapat dibuat menjadi satu baris:
sumber
Jika Anda membutuhkan baris yang sama tetapi hanya sampel acak,
Di sini x, harus menjadi 'int' yang mendefinisikan jumlah baris yang ingin Anda pilih secara acak.
sumber
old_array
merupakan urutan atau set, bukan array numpy [tautan] ( docs.python.org/3/library/random.html#functions-for- followingences )Jika Anda ingin membuat beberapa himpunan bagian acak dari baris, misalnya jika Anda melakukan RANSAC.
sumber