2013-08-23 45 views
39

Chúng tôi khởi tạo một mảng NumPy với số không như dưới đây:Kiểm tra xem NumPy mảng chỉ chứa số không

np.zeros((N,N+1)) 

Nhưng làm thế nào để chúng tôi kiểm tra xem tất cả các yếu tố trong một trao n * n ma trận mảng NumPy là zero.
Phương thức chỉ cần trả về giá trị Đúng nếu tất cả các giá trị thực sự bằng không.

Trả lời

28

Khám phá numpy.count_nonzero.

>>> np.count_nonzero(np.eye(4)) 
4 
>>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]]) 
5 
+3

Bạn muốn 'không np.count_nonzero (np.eye (4))' để trở 'TRUE' chỉ khi tất cả các giá trị là 0. –

28

Tôi muốn sử dụng np.all đây, nếu bạn có một mảng a:

>>> np.all(a==0) 
+0

tôi thích rằng câu trả lời này kiểm tra cho zero giá trị phi cũng . Ví dụ, người ta có thể kiểm tra xem tất cả các phần tử trong một mảng có giống nhau hay không bằng cách thực hiện 'np.all (a == a [0])'. Cảm ơn rất nhiều! –

84

Những câu trả lời khác được đăng ở đây sẽ làm việc, nhưng các chức năng rõ ràng nhất và hiệu quả nhất để sử dụng là numpy.any():

>>> all_zeros = not np.any(a) 

hoặc

>>> all_zeros = not a.any() 
  • Điều này được ưu tiên hơn numpy.all(a==0) vì nó sử dụng ít RAM hơn. (Nó không yêu cầu mảng tạm thời được tạo bởi cụm từ a==0.)
  • Ngoài ra, nó nhanh hơn numpy.count_nonzero(a) vì nó có thể trở lại ngay lập tức khi phần tử nonzero đầu tiên được tìm thấy.
+0

Tôi không chắc chắn rằng tôi đồng ý rằng đây là giải pháp rõ ràng nhất. – Akavall

-3

Nếu bạn đang kiểm tra tất cả các số 0 để tránh cảnh báo về một chức năng numpy khác, sau đó gói dòng trong một lần thử, ngoại trừ khối sẽ lưu phải thực hiện kiểm tra cho số 0 trước hoạt động bạn quan tâm

try: # removes output noise for empty slice 
    mean = np.mean(array) 
except: 
    mean = 0 
Các vấn đề liên quan