2013-03-14 116 views
7

Làm cách nào chúng ta có thể loại bỏ hiệu quả nhiều dòng và cột khỏi ma trận trong Matlab? Một vectơ giữ các chỉ mục cần xóa.Xóa hàng và cột khỏi ma trận trong Matlab

Input: t bằng t ma trận

Output: (t-k) bằng (t-k) ma trận trong đó k hàng không liền kề và các cột tương ứng được lấy ra từ ma trận đầu vào.

Trả lời

16

Điều này sẽ giải quyết được vấn đề của bạn.

matrix=randi(100,[50 50]); 
rows2remove=[2 4 46 50 1]; 
cols2remove=[1 2 5 8 49]; 
matrix(rows2remove,:)=[]; 
matrix(:,cols2remove)=[]; 

Trên nghĩ thứ hai, nếu bạn có chỉ số, thì trước tiên chuyển đổi những chỉ số để kí hiệu bằng cách sử dụng chức năng ind2sub như:

[rows2remove,cols2remove] = ind2sub(size(matrix),VecOfIndices); 

Bây giờ bạn sẽ nhận được hàng và chỉ số cột của các yếu tố cần bị gỡ bỏ. Không thể xóa các phần tử riêng lẻ khỏi ma trận. Vì vậy, tôi giả định rằng bạn cần phải loại bỏ toàn bộ cột và hàng. Điều đó có thể được thực hiện như:

rows2remove=unique(rows2remove); 
cols2remove=unique(cols2remove); 
matrix(rows2remove,:)=[]; 
matrix(:,cols2remove)=[]; 

Nếu bạn muốn loại bỏ các yếu tố cá nhân sau đó, hoặc sử dụng một mảng di động hoặc thay thế những yếu tố với một số giá trị đã lỗi thời như 9999.

+0

Giả sử nếu tôi nhập số nói 5, tôi muốn xóa 'hàng thứ 5' và' cột thứ 5' khỏi 'ma trận', bạn có thể đề xuất bất kỳ' dòng mã đơn' nào để làm điều đó không? – noufal

+0

Tôi có ma trận rất lớn và không thể sao chép ma trận để xóa một số phần, tôi cần sử dụng dữ liệu và xóa dữ liệu mà tôi sử dụng và tạo một mảng khác từ không gian đó, tôi nên làm như thế nào? – Ehsan

+0

@Ehsan Tại sao bạn cần tạo bản sao thứ hai? Điều này sẽ làm việc: 'ma trận (rows2remove,:) = []; ma trận (:, cols2remove) = []; ' –

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