Trong Python, làm cách nào để tạo một mảng hình dạng tùy ý chứa đầy tất cả Đúng hoặc Tất cả Sai?
Trong Python, làm cách nào để tạo một mảng hình dạng tùy ý chứa đầy tất cả Đúng hoặc Tất cả Sai?
Câu trả lời:
numpy đã cho phép tạo ra các mảng của tất cả các số hoặc tất cả các số không rất dễ dàng:
ví dụ numpy.ones((2, 2))
hoặcnumpy.zeros((2, 2))
Vì True
và False
được biểu diễn trong Python tương ứng 1
và 0
, tương ứng, chúng ta chỉ phải xác định mảng này phải là boolean bằng dtype
tham số tùy chọn và chúng ta đã hoàn thành.
numpy.ones((2, 2), dtype=bool)
trả về:
array([[ True, True],
[ True, True]], dtype=bool)
CẬP NHẬT: 30 tháng 10 năm 2013
Kể từ phiên bản 1.8 numpy , chúng tôi có thể sử dụng full
để đạt được kết quả tương tự với cú pháp thể hiện rõ hơn ý định của chúng tôi (như fmonegaglia chỉ ra):
numpy.full((2, 2), True, dtype=bool)
CẬP NHẬT: 16 tháng 1 năm 2017
Vì ít nhất là phiên bản numpy 1.12 , full
tự động chuyển kết quả đến dtype
tham số thứ hai, vì vậy chúng tôi chỉ có thể viết:
numpy.full((2, 2), True)
a=np.ones((2,2))
tiếp theo là a.dtype=bool
KHÔNG hoạt động.
numpy.full((2,2), True, dtype=bool)
ones
và zeros
không xây dựng một loạt các số nguyên. Họ xây dựng một loạt các bool trực tiếp.
numpy.full((2,2), True)
một tương đương?
int 1
sang bool True
.
ones
và zeros
, tạo ra các mảng đầy đủ các số và số 0 tương ứng, lấy một dtype
tham số tùy chọn :
>>> 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)
Nếu nó không phải ghi, bạn có thể tạo một mảng như vậy với 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)
Nếu bạn cần nó có thể ghi, bạn cũng có thể tạo một mảng trống và fill
chính nó:
>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Những cách tiếp cận này chỉ là những gợi ý thay thế. Nói chung, bạn nên gắn bó np.full
, np.zeros
hoặc np.ones
giống như các câu trả lời khác gợi ý.
Nhanh chóng chạy một thời gian để xem, nếu có bất kỳ sự khác biệt giữa phiên bản np.full
và np.ones
.
Trả lời: Không
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")
Kết quả:
np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s
QUAN TRỌNG
Về bài đăng về np.empty
(và tôi không thể bình luận, vì danh tiếng của tôi quá thấp):
ĐỪNG LÀM ĐƯỢC. KHÔNG SỬ DỤNG np.empty
để khởi tạo tất cảTrue
mảng
Vì mảng trống, bộ nhớ không được ghi và không có gì đảm bảo, giá trị của bạn sẽ là gì, vd
>>> 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 (Kích thước, Giá trị vô hướng, Loại). Ngoài ra còn có các đối số khác có thể được thông qua, để biết tài liệu về điều đó, hãy kiểm tra https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
np.full
- hơn một năm trước!