Hãy nói rằng tôi có một ma trận vuông như đầu vào:Python - NumPy - xóa nhiều hàng và cột từ một mảng
array([[0, 1, 1, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[0, 1, 1, 0]])
Tôi muốn đếm nonzeros trong mảng sau loại bỏ các hàng 2 và 3 và cols 2 và 3. Sau đó tôi muốn làm tương tự cho các hàng 3 và 4 và cols 3 và 4. Do đó, đầu ra phải là:
0 # when removing rows/cols 2 and 3
3 # when removing rows/cols 3 and 4
Đây là giải pháp ngây thơ sử dụng np.delete
:
import numpy as np
a = np.array([[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]])
np.count_nonzero(np.delete(np.delete(a, (1,2), axis=0), (1,2), axis=1))
np.count_nonzero(np.delete(np.delete(a, (2,3), axis=0), (2,3), axis=1))
Nhưng np.delete
trả về một mảng mới. Có phương pháp nhanh hơn, có liên quan đến việc xóa hàng và cột đồng thời không? Có thể sử dụng mặt nạ được không? Số documentation trên np.delete
lần đọc:
Thường thì nên sử dụng mặt nạ boolean.
Tôi làm cách nào để thực hiện điều đó? Cảm ơn.
Khi bạn đưa ra những loại câu hỏi, điều quan trọng là để giải thích các kích thước của mỗi biến (ví dụ như kích thước của ma trận. , số lượng hàng đã xóa, v.v.) vì chất lượng rất nhiều câu trả lời phụ thuộc vào điều này. – Veedrac
@Veedrac Cảm ơn! Tôi biết. Tôi sẽ cố gắng không quên trong tương lai. Trong trường hợp này, số hàng trong ma trận vuông không bao giờ lớn hơn 10. –