2012-07-03 6 views
2

와 histc이를 고려매트랩은 - 많은 가장자리 벡터

a = [1 ; 7 ; 13]; 
edges = [1, 3, 6, 9, 12, 15]; 

[~, bins] = histc(a, edges) 

bins = 

    1 
    3 
    5 

가 지금은하지만 즉, 각 a 값에 대한 다른 "가장자리"벡터, 행렬 대신 벡터, 동일한 출력을하고 싶습니다 가장자리. Exemple : 나는이 루프를 방지하기 위해 노력하고있어 의해

a = [1 ; 7 ; 13]; 
    edges = [ 1, 3, 6 ; 1, 4, 15 ; 1, 20, 30]; 

edges = 

    1  3  6 
    1  4 15 
    1 20 30 


    indexes = theFunctionINeed(a, edges); 

    indexes = 
      1 % 1 inside [1, 3, 6] 
      2 % 7 indide [1, 4, 15] 
      1 %13 inside [1, 20, 30] 

I는 for 루프 내에서 histc이 작업을 수행 할 수있다. 당신이 배열을 셀에 당신의 배열을 변환하는 경우

답변

2

, 당신이 ~ 편집 ~

는 셀 어레이 당신으로 행렬을 변환하기 위해

indexes = 

    [1] 
    [2] 
    [1] 

결과

a = {1 ; 7 ; 13}; 
edges = {[ 1, 3, 6 ];[ 1, 4, 15] ; [1, 20, 30]}; 

[~, indexes] = cellfun(@histc, a, edges,'uniformoutput', false) 

을 시도 할 수 있습니다 사용할 수 있습니다 num2cell :

a = num2cell(a); 
edges = num2cell(edges, 2); 
+0

cellarray하는 매트릭스에서 통과 할 수있는 간단한 방법이 있습니까? – Johnny5

+0

@ Johnny5 : 업데이트 된 답변을 참조하십시오. –

2

당신도 할 수 :

a = [1; 7; 13]; 
edges = [1 3 6; 1 4 15; 1 20 30]; 

bins = sum(bsxfun(@ge, a, edges), 2) 

결과 :

>> bins 
bins = 
    1 
    2 
    1 
+0

H.Muster의 솔루션에 비해 성능이 향상 되었습니까? – Johnny5

+0

셀 배열의 행렬을 변환하지 않아도됩니다. – Johnny5

+0

@ Johnny5 : 두 접근법을 모두 테스트 할 수 있습니다. 더 큰 데이터를 만들고 tic/toc를 사용하여 타이밍을 비교하십시오 ...이 것이 더 빠를 것이라고 생각합니다. 그러나 내 말을 받아들이지 마십시오. – Amro