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 True
dan False
diwakili dalam Python sebagai 1
dan 0
, masing-masing, kita hanya perlu menentukan array ini harus boolean menggunakan dtype
parameter 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 full
untuk 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 , full
secara otomatis melemparkan hasil ke dtype
parameter kedua, jadi kita bisa menulis:
numpy.full((2, 2), True)
a=np.ones((2,2))
diikuti dengan a.dtype=bool
TIDAK bekerja.
numpy.full((2,2), True, dtype=bool)
ones
dan zeros
tidak membangun array bilangan bulat. Mereka membangun array bools secara langsung.
numpy.full((2,2), True)
setara?
int 1
ke bool True
.
ones
dan zeros
, yang masing-masing membuat array penuh satu dan nol, ambil dtype
parameter 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 fill
itu 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.zeros
atau np.ones
seperti yang disarankan jawaban lain.
Cepat jalankan timeit untuk melihat, jika ada perbedaan antara versi np.full
dan 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.empty
untuk menginisialisasi semua- True
array
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!