2016-02-15 50 views
6

Tôi muốn xóa một số cột và hàng khỏi ma trận lớn. Đó là các cột và các hàng có tất cả các giá trị 0. Có bất kỳ chức năng trong MATLAB có thể làm điều đó cho bạn khá nhanh? Ma trận của tôi là thưa thớt. Tôi đang thực hiện theo cách này:Xóa cột số 0 và hàng khỏi ma trận MATLAB

% To remove all zero columns from A 
ind = find(sum(A,1)==0) ; 
A(:,ind) = [] ; 

% To remove all zeros rows from A 
ind = find(sum(A,2)==0) ; 
A(ind,:) = [] ; 

Sẽ tốt hơn nếu có một dòng mã cho điều này vì tôi có thể thực hiện loại công việc này nhiều lần. Cảm ơn

+1

Mã của bạn có vẻ tốt. Nếu ma trận của bạn là thưa thớt nó có thể nhanh hơn mặc dù khi bạn sao chép các phần tử khác không (không biết, chỉ là một dự đoán): 'B = A (~ ind, :)'. –

+0

Có thể trùng lặp của [Loại bỏ số không khỏi ma trận - Không thưa thớt] (http://stackoverflow.com/questions/738438/removing-zeros-from-a-matrix-not-sparse) – GameOfThrows

+1

bằng cách sử dụng 'tất cả (A, 1) 'hoặc' tất cả (A, 2) 'có thể nhanh hơn' tổng (A, 1) ', nhưng tôi không kiểm tra. – Max

Trả lời

7

Một dòng mã sẽ là:

A=A(any(X,2),any(X,1)) 

Không có nhu cầu sử dụng find như bạn đã làm, bạn có thể trực tiếp chỉ số sử dụng các vector logic.

+0

Câu trả lời hoàn hảo, tuyệt vời cho câu hỏi của tôi khi xem xét tất cả các nhận xét mà mọi người đã cho tôi. Daniel You Rule! – Yas

Các vấn đề liên quan