Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

MATLAB accumarray problem

  1. Nov 29, 2012 #1
    accumarray documentation
    Is anyone proficient in the use of accumarray?
    I supply two vectors of same length, indices L,weights W, L positive integers as required.
    I sort the indices to ascending.Then, the result of accumarray is not equal to unique(L).How could this be?
    Code for illustration:
    Code (Text):

    i = [46    47    47    46    48    49    48    48    48]';
    w = 2*rand(size(i));
    Y=[i';w'];
    [x y] = sort(Y(1,:));
    Y = Y(:,y);
    Y,pause
    uw = accumarray((Y(1,:))',Y(2,:)');

    ui = unique(i);
    numel(uw),numel(ui)

    --- OUTPUT :

    Y =

       46.0000   46.0000   47.0000   47.0000   48.0000   48.0000   48.0000   48.0000   49.0000
        1.5844    0.0714    1.9190    1.3115    1.6983    1.3575    1.5155    1.4863    1.8680


    ans =

        49


    ans =

         4
     
    I get 49 weight vectors for the 9 indices, the unique of which are 4!
     
  2. jcsd
  3. Nov 29, 2012 #2

    MATLABdude

    User Avatar
    Science Advisor

    It took me a few passes to read through the documentation and understand it, but I think the key is where it explains what the function actually does (and then apply that to the first example).

    In the case of the example, the output size is the maximum of the subs array--4. The subs array acts as an array of subscripts applied to the values contained in val. 101 is given a subscript of 1, 102 and 104 given subscripts of 2, 103 and 105 given subscripts of 4, and none given subscripts of 3. Bin labels, if you want to think of it in histogram terms.

    When you apply accumarray to them, the first entry will be the sum of those elements with subscript 1, the second with subscript 2, and so on. Which is why the output array has a sum of zero for the third element (none of the elements of val were subscripted with three).

    In your case:
    • uw has 49 elements because that's the largest of the values contained in i.
    • uw probably only has six non-zero elements--uw(46) through uw(49)
    • uw(1:45) are zero

    I hope this helps in your understanding of what's going on in this portion of your work, because I don't have any experience with the larger problem that you're working on.
     
  4. Dec 1, 2012 #3
    Yes i got it eventually.
    In my example,to add you just use the weights
    uw(ui)
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: MATLAB accumarray problem
  1. Matlab problem (Replies: 4)

  2. Matlab problem (Replies: 0)

  3. MATLAB problem (Replies: 5)

  4. MATLAB problem (Replies: 1)

Loading...