So I am currently using 'accumarray' to find the averages of a range of numbers wich correspond to matching ID's. Ex Input:
ID----Value
1 215
1 336
1 123
2 111
2 246
2 851
My current code finds the unweighted average of the above values, using the ID as the 'seperator' so that I don't get the average for all of the values together as one number, but rather seperate results for just values which have corresponding ID's. EX Output:
ID----Value
1 224.66
2 402.66
To achieve this I am using this code:
[ID, ~, Groups] = unique(StarData2(:,1),'stable');
app = accumarray(Groups, StarData2(:,2), [], @mean);
With StarData2 being the input of the function. This is working perfectly for my purposes until now, I need to know if accumarray can be made to give me a weighted average, such that each point in app (before the average is found) can be assigned a weight or that the @mean can be replaced with a function that can achieve this. The new input will look like this:
ID----Value----Weight
1 215 12
1 336 17
1 123 11
2 111 6
2 246 20
2 851 18
The new code must do the sum(val(i)*weight(i))/sum(weight) instead of just the standard mean. Thanks for any assistance.