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ì Truevà Falseđược biểu diễn trong Python tương ứng 1và 0, tương ứng, chúng ta chỉ phải xác định mảng này phải là boolean bằng dtypetham 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 , fulltự động chuyển kết quả đến dtypetham 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=boolKHÔNG hoạt động.
numpy.full((2,2), True, dtype=bool)
onesvà zeroskhô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 1sang bool True.
onesvà zeros, tạo ra các mảng đầy đủ các số và số 0 tương ứng, lấy một dtypetham 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à fillchí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.zeroshoặc np.onesgiố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.fullvà 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!