2

このことを考慮 :

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

4

2 に答える 2

3

配列をセル配列に変換する場合は、

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);
于 2012-07-03T13:36:21.690 に答える
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
于 2012-07-03T15:16:37.820 に答える