MATLAB

2017-04-19 1 views
0

이 내 다른 크기와 1xM 셀에는 M × N 행렬을 분할 mat2cell 사용 문제입니다 셀의 M에는 크기가 1xNi 인 배열이 있습니다 (이는 배열의 크기가 다른 것을 의미합니다).MATLAB

mat2cell 함수를 사용하여이 작업을 수행하려고하지만 루프를 사용하지 않으려 고하고이를 수행하는 방법을 모르겠습니다.

예를 통해 문제를 설명하려고합니다. 내가 할 수있는 코드가 각 행의 X<=6을 값을하고 1xM 세포에 넣어입니다 원하는 것은 매트릭스

X = [1,4,6,9; 2,3,6,7; 5,9,8,7; 9,8,7,10] 

을 가지고 있다고 가정하자. 그래서 대답은해야한다 : 나는 조건에 맞는 요소를 찾기 위해 행렬의 모든 행을 통과 루프를 만든 지금까지

ans = 


C{1} = [1,4,6] 
C{2} = [2,3,6] 
C{3} = [5] 
C{4} = [] 

:

for i = 1:Mrows 
    C{i} = X(i,X(i,:)<=6,:); 
end 

이 나에게 결과를 제공을 I 원하지만 매트릭스의 크기가 매우 클 때 특별히 시간이 많이 걸립니다.

답변

0

당신이 셀에 각 행을 변환 할 num2cell(A,2)를 사용하여 다음 6 이상의 값이 작은 제거 cellfun을 적용

X = [1,4,6,9; 2,3,6,7; 5,9,8,7; 9,8,7,10]; 
C = num2cell(X,2); 
res = cellfun(@(x) x(x<=6),C,'UniformOutput',0); 

을하고 당신이 얻을 :

{ 
[1,4,6]; 
[2,3,6]; 
[5]; 
[] 
} 
+0

나는 그것을 시도하고 완벽하게 작동합니다! 그리고 제가 작성한 것보다 더 간단합니다! 감사 :). –

0

당신은 메모리를 미리 할당하는 것이 좋습니다, 즉, 채우기를 시작하기 전에 비어있는 C 셀 배열을 만듭니다.

X = [1,4,6,9; 2,3,6,7; 5,9,8,7; 9,8,7,10]; 
Mrows = numel(X(:,1)); 

C = cell(Mrows,1); %preallocate memory 

for i = 1:Mrows 
    C{i} = X(i,X(i,:)<=6,:); 
end