Pertanyaan numpy.random.choice vs. random.choice


Mengapa numpy.random.choice tidak berfungsi sama dengan random.choice? Ketika saya melakukan ini:

 >>> random.choice([(1,2),(4,3)])
 (1, 2)

Berhasil.

Tetapi ketika saya melakukan ini:

 >>> np.random.choice([(1,2), (3,4)])
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "mtrand.pyx", line 1393, in mtrand.RandomState.choice 
 (numpy/random/mtrand/mtrand.c:15450)
 ValueError: a must be 1-dimensional

Bagaimana cara mencapai perilaku yang sama dengan random.choice () di numpy.random.choice ()?


5
2018-04-27 18:04


asal


Jawaban:


Baik np.random.choice seperti yang tercantum dalam dokumen, mengharapkan larik 1D dan masukan Anda saat diekspresikan sebagai larik 2D. Jadi, itu tidak akan berhasil seperti itu.

Untuk membuatnya bekerja, kita dapat memberi masukan pada panjang input dan membiarkannya memilih satu indeks, yang ketika diindeks ke input akan menjadi satu yang setara dari random.choice, seperti yang ditunjukkan di bawah ini -

out = a[np.random.choice(len(a))] # a is input

Contoh run -

In [74]: a = [(1,2),(4,3),(6,9)]

In [75]: a[np.random.choice(len(a))]
Out[75]: (6, 9)

In [76]: a[np.random.choice(len(a))]
Out[76]: (1, 2)

Sebagai alternatif, kita dapat mengubah input ke array 1D dari objek dtype dan itu akan memungkinkan kita untuk langsung menggunakannya np.random.choice, seperti yang ditunjukkan di bawah ini -

In [131]: a0 = np.empty(len(a),dtype=object)

In [132]: a0[:] = a

In [133]: a0.shape
Out[133]: (3,)  # 1D array

In [134]: np.random.choice(a0)
Out[134]: (6, 9)

In [135]: np.random.choice(a0)
Out[135]: (4, 3)

13
2018-04-27 18:11



Terkait, jika Anda ingin secara acak mengambil sampel baris dari matriks 2D seperti ini

x = np.array([[1, 100], [2, 200], [3, 300], [4, 400]])

maka Anda dapat melakukan sesuatu seperti ini:

n_rows = x.shape[0]
x[np.random.choice(n_rows, size=n_rows, replace=True), :]

Harus bekerja untuk matriks 2D dengan sejumlah kolom, dan tentu saja Anda dapat mengambil sampel sebanyak yang Anda inginkan dengan size kwarg, dll.


1
2018-06-02 19:53