Dengan Python, bagaimana cara membuat array numpy dengan bentuk acak yang diisi dengan semua Benar atau semua Salah?
Dengan Python, bagaimana cara membuat array numpy dengan bentuk acak yang diisi dengan semua Benar atau semua Salah?
Jawaban:
numpy sudah memungkinkan pembuatan array semua atau semua nol dengan sangat mudah:
misalnya numpy.ones((2, 2))ataunumpy.zeros((2, 2))
Karena Truedan Falsediwakili dalam Python sebagai 1dan 0, masing-masing, kita hanya perlu menentukan array ini harus boolean menggunakan dtypeparameter opsional dan kita selesai.
numpy.ones((2, 2), dtype=bool)
pengembalian:
array([[ True, True],
[ True, True]], dtype=bool)
PEMBARUAN: 30 Oktober 2013
Sejak numpy versi 1.8 , kita dapat menggunakan fulluntuk mencapai hasil yang sama dengan sintaks yang lebih jelas menunjukkan niat kita (seperti yang ditunjukkan fmonegaglia):
numpy.full((2, 2), True, dtype=bool)
PEMBARUAN: 16 Januari 2017
Karena setidaknya numpy versi 1.12 , fullsecara otomatis melemparkan hasil ke dtypeparameter kedua, jadi kita bisa menulis:
numpy.full((2, 2), True)
a=np.ones((2,2))diikuti dengan a.dtype=boolTIDAK bekerja.
numpy.full((2,2), True, dtype=bool)
onesdan zerostidak membangun array bilangan bulat. Mereka membangun array bools secara langsung.
numpy.full((2,2), True)setara?
int 1ke bool True.
onesdan zeros, yang masing-masing membuat array penuh satu dan nol, ambil dtypeparameter opsional :
>>> numpy.ones((2, 2), dtype=bool)
array([[ True, True],
[ True, True]], dtype=bool)
>>> numpy.zeros((2, 2), dtype=bool)
array([[False, False],
[False, False]], dtype=bool)
Jika tidak harus dapat ditulisi, Anda dapat membuat array dengan np.broadcast_to:
>>> import numpy as np
>>> np.broadcast_to(True, (2, 5))
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Jika Anda membutuhkannya dapat ditulisi, Anda juga dapat membuat array kosong dan fillitu sendiri:
>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Pendekatan-pendekatan ini hanyalah saran alternatif. Secara umum Anda harus tetap dengan np.full, np.zerosatau np.onesseperti yang disarankan jawaban lain.
Cepat jalankan timeit untuk melihat, jika ada perbedaan antara versi np.fulldan np.ones.
Jawab: Tidak
import timeit
n_array, n_test = 1000, 10000
setup = f"import numpy as np; n = {n_array};"
print(f"np.ones: {timeit.timeit('np.ones((n, n), dtype=bool)', number=n_test, setup=setup)}s")
print(f"np.full: {timeit.timeit('np.full((n, n), True)', number=n_test, setup=setup)}s")
Hasil:
np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s
PENTING
Mengenai pos tentang np.empty(dan saya tidak dapat berkomentar, karena reputasi saya terlalu rendah):
JANGAN LAKUKAN ITU. JANGAN GUNAKAN np.emptyuntuk menginisialisasi semua- Truearray
Karena array kosong, memori tidak ditulis dan tidak ada jaminan, seperti apa nilai Anda, misalnya
>>> print(np.empty((4,4), dtype=bool))
[[ True True True True]
[ True True True True]
[ True True True True]
[ True True False False]]
>>> a = numpy.full((2,4), True, dtype=bool)
>>> a[1][3]
True
>>> a
array([[ True, True, True, True],
[ True, True, True, True]], dtype=bool)
numpy.full (Ukuran, Nilai Skalar, Jenis). Ada juga argumen lain yang dapat diajukan, untuk dokumentasi tentang itu, periksa https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
np.full- lebih dari satu tahun yang lalu!