2012-01-01 73 views
8

Trong một ma trận, để loại bỏ các cột trong đó các yếu tố của dòng đầu tiên là 0, chúng ta có thể sử dụng:Xóa các phần tử từ một tế bào trong Matlab

ind2remove = (A(1,:) == 0); 
A(:,ind2remove) = []; 

Làm thế nào để làm điều đó nếu A là một tế bào ? Tôi muốn loại bỏ các cột trong đó các phần tử của hàng đầu tiên là 0.

tôi đã cố gắng:

ind2remove = (A{1,:} == 0); 
A{:,ind2remove} = []; 

nhưng tôi đã nhận được thông báo lỗi:

??? Error using ==> eq 
Too many input arguments. 

Error in ==> ind2remove = (A{1,:} == 0); 
+0

Một ô có thể chứa các loại dữ liệu khác nhau. Làm thế nào để tế bào của bạn trông như thế nào? Liệu nó chỉ có một phần tử (số) trong mỗi ô? Câu trả lời rất đơn giản, nhưng tôi muốn có một dữ liệu ví dụ. – abcd

+0

@yoda: hàng đầu tiên của ô A chứa các giá trị số và dòng thứ hai chứa ma trận – bzak

Trả lời

10

Indexing sử dụng { } mang đến cho bạn các nội dung của ô, trong khi lập chỉ mục sử dụng () trả về cùng một loại với nghĩa là đối tượng ban đầu, nếu A là ô, A{i,j} sẽ trả lại giá trị của nó giữ và A(i,j) sẽ luôn trả về một ô. Bạn cần cái sau.

Vì vậy, trong trường hợp của bạn, bạn có thể thực hiện các thao tác sau để loại bỏ tất cả các cột trong đó hàng đầu tiên có số 0.

A(:, cellfun(@(x)x==0, A(1,:))) = []; 

Giả thiết ở đây là mỗi ô trong hàng đầu tiên chỉ giữ một phần tử số duy nhất theo nhận xét của bạn.

+0

cảm ơn bạn rất nhiều. – bzak

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