2011-03-09 9 views
0

차원 2 * n 행렬의 시작 부분에서 많은 양의 데이터를 효율적으로 삭제하려고합니다. 매트릭스는 다음과 같습니다 : 행이 숫자 순서의 요소는 (안 작은 경우효율적으로 행렬 요소 삭제

x1 x2 
x3 x4 
... 
... 

내가 몇 개의보다 작은 행의 첫 번째 요소가있는 모든 행을 삭제하고 중지하려면)

내가 지금하는 일은 느리다 :

while 1 
    if list{i}(1) <= someNumber 
     list{i}(1,:) = [] 
    else 
     break; 
    end 
end 

MATLAB에서 신속하게이 일을 깔끔한 방법이 있어야합니다?

감사합니다.

답변

2

한 가지 방법은 내가 필요한 모든 그냥 즉

rows2delete = list{i}(:,1) <= someNumber; %# creates logical array with 1 for deletion 
list{i}(rows2delete,:) = []; %# delete some rows, all corresponding cols 
+0

최고 조나스, 한 번에 전체 첫 번째 열을 비교 한 후 삭제하는 것입니다. MatLab이 그것을 할 수있는 좋은 방법이 있어야한다는 것을 알았지 만 그것은 나의 언어가 아닙니다 :). 최소 시간이 경과하면 수락합니다. 고마워 .. 많은 면도날. – ale

+0

@ vivid-colors : btw, 목록의 모든 셀에 대해 이렇게해야하는 경우 한 줄짜리 셀에'cellfun'을 사용할 수 있습니다 :'list = cellfun (@ (x) x (x (:, 1) > someNumber, :), 목록, 'uniformOutput', false)'. 이것은'list'의 각 배열에 대해 첫 번째 값이'someNumber'보다 큰 행을 유지합니다. – Jonas

+0

도움을 주셔서 감사합니다. 정말 도움이되었습니다. 관심이있을만한 유사한 문제를 방금 게시했습니다. MATLAB에서 이러한 종류의 작업을 더 효과적으로 수행하는 방법을 배워야합니다. – ale

관련 문제