2012-07-03 55 views
2

考慮一下:MatLab的 - histc許多邊緣矢量

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

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

bins = 

    1 
    3 
    5 

現在我想有相同的輸出,但有不同的「邊緣」向量每個a值,即一個矩陣,而不是一個向量邊緣。例:

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] 

我可以histc做這for循環中,由我試圖避免環路。

回答

2

如果你改變你的陣列單元陣列,你可以嘗試

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

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

這導致

indexes = 

    [1] 
    [2] 
    [1] 

〜編輯〜

改變你的矩陣轉換成電池陣列您可以使用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