2013-07-22 1 views
0

각 열에 44 행과 다른 열 길이가있는 셀 배열이 있습니다.
어떻게 각 열의 수를 계산할 수 있습니까? 열?
matlab에서 셀 배열 행의 열 개수를 계산

%a is the cell array 
s=length(a) 

는 44을 제공합니다 행의 수는 : 나는 2 개 가지 방법으로 둘 다 잘못
1 일을 사용했습니다
(그 내용이 비어 있지 않은 열)

(가)하지만이 중 하나가 작동이 발생하지 않는 한

[row, columms]=size(a) 

2 열 수 differe입니다 각 행에 nt.
적어도 비어 있지 않은 열의 수를 의미합니다
예를 들어 행 1의 열 수는 43 (a {1 1:43})이지만 각 요소의 열 수는 필요합니다 {1,1}과 같이 384 또는 {1,2}, a {1,3} 등

답변

0

그래서 정말로 묻는 것은 "셀 배열의 각 행에 얼마나 많은 비어 있지 않은 요소가 있습니까?"입니다.

filledCells = ~cellfun(@isempty,a); 
columns = sum(filledCells,2); 
+0

감사하지만 내가 틀린 놀란에 대한 논평으로 그것은 – samdean

+0

@ samdean, 나는 지금 내가 생각하는 것 같아. 내 대답을 편집했습니다. –

+0

고마워, 정답을 준다 – samdean

1

셀 배열의 각 멤버에 개별적으로 액세스해야합니다. 데이터 은 셀에을 포함합니다. 셀은 컨테이너입니다. 두 가지 방법 루프

:

cell_content_lengths=zeros(1,length(a)); 
for v=1:length(a) 
    cell_content_lengths(v)=length(a{v}); 
end 

cellfun :

cell_content_lengths=cellfun(@length,a); 

모든 빈 셀 그냥 길이 0있을 것이다. 행렬에 대한 루프를 확장하는 것은 간단하다, 당신이 관심이 있다면 당신은 같은 것을 사용하여 매트릭스를 포함하는 셀에 cellfun 부분을 확장 할 수 있습니다 : a의 각 요소

cell_content_sizes=cell2mat(cellfun(@length,a,'uniformoutput',false)); 

은 (위의 참고 사항 그렇지 않으면 귀하의 의견을 바탕으로 합치 다양한 크기의 행렬에 대한 오류)

편집

를 제공합니다 동일한 차원을 가질 필요가 나는 당신이 찾고있는 것을 이해 생각 :

non_empty_cols = sum(~cellfun(@isempty,a),2); 

@ MZimmerman6에게 감사드립니다. 저의 앞에 그것을 이해했습니다.

+0

당신은 단순히'합이 될 수 있도록, 특히 각 셀은 여러 다른 세포를 포함, cellfun의 결과를 요약해야 할 것이다 (cellfun (@ 길이, A), 2)' – MZimmerman6

+0

당신은 필요가 없습니다 @samdean이 각 개별 셀 요소의 데이터 크기를 찾고있는 원래 게시물을 이해한다면 이들을 합산 할 수 있습니다. –

+0

순수한 2 차원 셀 배열이라면 빈 내용 셀에 대해 언급했기 때문에 이것이 사실이 아니라고 생각한 유일한 이유였습니다. – MZimmerman6