Làm thế nào để tạo một mảng numpy của tất cả True hoặc all false?


Câu trả lời:


281

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))

TrueFalseđược biểu diễn trong Python tương ứng 10, 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)


37
Bạn đã trả lời câu hỏi của riêng bạn trong cùng một phút khi câu hỏi được đăng?
M4rtini

26
@ M4rtini SO cho phép bạn đăng câu hỏi và câu trả lời cho câu hỏi cùng một lúc.
Mick MacCallum

1
dtype = int khởi tạo mảng không thể được sử dụng để lựa chọn phần tử mảng.
Jichao

1
Những công việc này. Tuy nhiên, hãy cẩn thận vì như @Jichao nói, a=np.ones((2,2))tiếp theo là a.dtype=boolKHÔNG hoạt động.
medley56

8
Bây giờ là một meme nổi tiếng: devhumor.com/media/ Mạnh
WLGfx

93
numpy.full((2,2), True, dtype=bool)

12
+1 Tôi nghĩ rằng đây nên là câu trả lời được chấp nhận. Có vẻ tự nhiên hơn để lấp đầy một mảng bằng bools, hơn là lấp đầy nó bằng các con số để chuyển chúng thành bool.
Zelphir Kaltstahl

5
Các câu trả lời oneszeroskhô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.
user2357112 hỗ trợ Monica

1
numpy.full((2,2), True)một tương đương?
Pavel

Đó là trong 1,12+ numpy. Tôi cũng không nhớ liệu nó có áp dụng cho các phiên bản cũ hay không
fmonegaglia

Chắc chắn dtype được lưu trữ riêng biệt từ dữ liệu khi có thể? Tôi không thể tưởng tượng numpy làm bất kỳ nâng nặng để chuyển đổi int 1sang bool True.
BallpointBen

30

oneszeros, 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)

10

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 ý.


3

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.fullnp.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]]

0
>>> 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


6
Vâng, một câu trả lời khác đã được trả lời bằng cách sử dụng np.full- hơn một năm trước!
MSeifert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.