2010-05-12 2 views
11

나는 그렇게처럼 셀 어레이에서 일부 값을 제거하는 기능을 쓰고 있어요 :MATLAB 함수가 가변 개수의 값을 반환하면 어떻게 모든 것을 셀 배열로 가져올 수 있습니까?

function left = remove(cells, item); 
left = cells{cellfun(@(i) ~isequal(item, i), cells)}; 

을하지만이 프로그램을 실행할 때, left는 논리적 배열 세포 {}에 대한 호출로, 첫 번째 값을 가지고 일치하는 모든 셀을 별도의 값으로 반환합니다. 어떻게 이러한 개별 반환 값을 단일 셀 배열로 그룹화합니까?

또한 이미 셀 배열에서 주어진 항목을 제거하는 방법이 있습니까? 문서에서 찾을 수 없습니다. {}를 사용하여 세포의 부분 집합의 내용을 반환하는 동안, 당신은 세포의 부분 집합을 줄 것이다 인덱싱 () 사용

function left = remove(cells, item) 
    left = cells(cellfun(@(i) ~isequal(item, i), cells)); 

:

답변

25

당신은 () 인덱스 대신에 {} 세포를 사용해야합니다 comma-separated list으로 입력하면 해당 목록의 첫 번째 항목 만 예제에서 left에 배치됩니다.

셀 배열 사용에 대한 자세한 내용은 this MATLAB documentation을 참조하십시오.


편집 : 응답은 당신에게 쉼표로 구분 된 목록을 제공하는 최대 끝나는 작동이있는 경우

, 당신이 세포로 목록의 개별 요소를 배치 할 수 있습니다 ... 댓글을 셀 배열의 중괄호로 작업을 둘러싼 다. 귀하의 예를 들어, 당신은 할 수 :

left = {cells{cellfun(@(i) ~isequal(item, i), cells)}}; 

중괄호의 내부 세트는 item 같지 않은 cells의 내용의 쉼표로 구분 된 목록을 생성하고, 외부 세트는 셀에이 목록을 수집 정렬. 물론 이것은 인덱싱에 괄호를 사용하는 것과 동일한 결과를 제공합니다.이 경우 더 합리적인 방법입니다.

함수이 여러 개의 출력 인수를 반환하고 이러한 여러 값을 셀 배열에 수집하려는 경우에는 좀 더 복잡합니다. 먼저 당신이 얻을 것이다 얼마나 많은 출력 인수를 결정해야한다, 또는 당신은 모든 가능한 출력을 얻을 수있는 기능을 NARGOUT을 사용할 수 있습니다 : 그럼 당신은 1 부산물 nOut 셀 어레이 outArgs에 의해로 출력을 수집 할 수 있습니다

nOut = 3;     %# Get the first three output arguments 
%# Or... 
nOut = nargout(@some_fcn); %# Get all the output arguments from some_fcn 

을 다음을 수행 :

함수가 variable number of output arguments이 있다면 당신은 자신이 경우에 nOut에 대한 값을 선택해야합니다, 그래서 NARGOUT이 음의 값을 반환합니다 주목해야한다
[outArgs{1:nOut}] = some_fcn(...); 

.

+0

아하! 당연하지. 그래서 여러 값을 반환하는 함수가 있다면? 사실 이후에 그들을 세포 배열로 분류 할 수있는 방법이 있습니까? – prismofeverything

+1

@kaleidomedallion : 여러 값을 반환하는 * 함수 * 또는 * 연산 *을 의미하는지 모르겠으므로 두 가지를 모두 설명하도록 답변을 업데이트했습니다. – gnovice

+1

전적으로 내 질문에 답변했습니다. 대단히 감사합니다! – prismofeverything

관련 문제