<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635</link>
    <title>MATLAB Central Newsreader - combine data?</title>
    <description>Feed for thread: combine data?</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Wed, 16 Jul 2008 08:00:20 -0400</pubDate>
      <title>combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443332</link>
      <author>jay vaughan</author>
      <description>Hi,&lt;br&gt;
&lt;br&gt;
I am trying to find a way to combine data without using a &lt;br&gt;
loop. My data are similar to the following.&lt;br&gt;
&lt;br&gt;
width  = [1 4 4 5 6 10 10 10 16];&lt;br&gt;
weight = [1 1 2 1 1 4  2  2  1];&lt;br&gt;
&lt;br&gt;
I would like to find a way to combine all entries where the &lt;br&gt;
width was the same, finding the total weight, like below.&lt;br&gt;
&lt;br&gt;
combined_width  = [1 4 5 6 10 16];&lt;br&gt;
combined_weight = [1 3 1 1 8  1];&lt;br&gt;
&lt;br&gt;
I have to do this a million times or so and was hoping to &lt;br&gt;
do it efficiently. Any ideas on how to vectorize something &lt;br&gt;
like this?&lt;br&gt;
&lt;br&gt;
Thanks,&lt;br&gt;
J</description>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 08:15:42 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443334</link>
      <author>vedenev</author>
      <description>here is the code:&lt;br&gt;
&lt;br&gt;
v=[1 4 4 5 6 10 10 10 16]&lt;br&gt;
dv=diff(v);&lt;br&gt;
r=find(dv);&lt;br&gt;
v1=[v(r) v(end)]&lt;br&gt;
&lt;br&gt;
------------------------------------&lt;br&gt;
Maxim Vedenev, Matlab freelancer&lt;br&gt;
&lt;a href=&quot;http://simulations.narod.ru/&quot;&gt;http://simulations.narod.ru/&lt;/a&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 08:37:10 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443337</link>
      <author>jay vaughan</author>
      <description>Hi Maxim,&lt;br&gt;
&lt;br&gt;
thanks for the speedy reply. Your code essentially does the &lt;br&gt;
following...&lt;br&gt;
&lt;br&gt;
v1=unique(v);&lt;br&gt;
&lt;br&gt;
What I would like to do is to find the sum of those &lt;br&gt;
elements in w whose corresponding elements in v are the &lt;br&gt;
same. For example, in v the 2nd and 3rd elements are both &lt;br&gt;
4, so I summed the 2nd &amp; 3rd elements from w in the output &lt;br&gt;
to get 1+2=3 in w_summed, etc.&lt;br&gt;
&lt;br&gt;
v = [1 4 4 5 6 10 10 10 16]&lt;br&gt;
w = [1 1 2 1 1 4  2  2  1];&lt;br&gt;
&lt;br&gt;
v_unique = [1 4 5 6 10 16];&lt;br&gt;
w_summed = [1 3 1 1 8  1];&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Any thoughts? Thanks,&lt;br&gt;
J&lt;br&gt;
&lt;br&gt;
vedenev &amp;lt;vedenev.maxim@gmail.com&amp;gt; wrote in message &lt;br&gt;
&amp;lt;2bc34cc4-1c0a-401f-af4a-&lt;br&gt;
0c5479ec0e4c@c65g2000hsa.googlegroups.com&amp;gt;...&lt;br&gt;
&amp;gt; here is the code:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; v=[1 4 4 5 6 10 10 10 16]&lt;br&gt;
&amp;gt; dv=diff(v);&lt;br&gt;
&amp;gt; r=find(dv);&lt;br&gt;
&amp;gt; v1=[v(r) v(end)]&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; ------------------------------------&lt;br&gt;
&amp;gt; Maxim Vedenev, Matlab freelancer&lt;br&gt;
&amp;gt; &lt;a href=&quot;http://simulations.narod.ru/&quot;&gt;http://simulations.narod.ru/&lt;/a&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 10:37:34 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443350</link>
      <author>Rune Allnor</author>
      <description>On 16 Jul, 10:00, &quot;jay vaughan&quot; &amp;lt;jvaughan5.nos...@gmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; Hi,&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I am trying to find a way to combine data without using a&lt;br&gt;
&amp;gt; loop.&lt;br&gt;
&lt;br&gt;
Sigh... the vixen of vectorisation in all her splendour...&lt;br&gt;
&lt;br&gt;
It can't be done. There is no way to do this without a loop.&lt;br&gt;
&lt;br&gt;
&amp;gt; My data are similar to the following.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; width =A0=3D [1 4 4 5 6 10 10 10 16];&lt;br&gt;
&amp;gt; weight =3D [1 1 2 1 1 4 =A02 =A02 =A01];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I would like to find a way to combine all entries where the&lt;br&gt;
&amp;gt; width was the same, finding the total weight, like below.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; combined_width =A0=3D [1 4 5 6 10 16];&lt;br&gt;
&amp;gt; combined_weight =3D [1 3 1 1 8 =A01];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I have to do this a million times or so and was hoping to&lt;br&gt;
&amp;gt; do it efficiently.&lt;br&gt;
&lt;br&gt;
That's a completely different issue. What I would do&lt;br&gt;
if I was constrained to matlab (not tested!):&lt;br&gt;
&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
wiv =3D unique(width);&lt;br&gt;
wev =3D zeros(size(wiv));&lt;br&gt;
&lt;br&gt;
for n=3D1:length(wev)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;idx=3Dfind(width=3D=3Dwiv(n));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;wev(n)=3Dsum(weight(idx));&lt;br&gt;
end&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
If this is too slow, first learn a proper programming&lt;br&gt;
language and then read&lt;br&gt;
&lt;br&gt;
Knuth: &quot;The Art of ComputerProgramming, vol 3:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sorting and Searching.&quot;&lt;br&gt;
&lt;br&gt;
In fact, that's not such a bad idea even if the script&lt;br&gt;
above runs fast enough for you.&lt;br&gt;
&lt;br&gt;
Rune</description>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 13:16:11 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443383</link>
      <author>Peter Boettcher</author>
      <description>&quot;jay vaughan&quot; &amp;lt;jvaughan5.nospam@gmail.com&amp;gt; writes:&lt;br&gt;
&lt;br&gt;
&amp;gt; Hi,&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I am trying to find a way to combine data without using a &lt;br&gt;
&amp;gt; loop. My data are similar to the following.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; width  = [1 4 4 5 6 10 10 10 16];&lt;br&gt;
&amp;gt; weight = [1 1 2 1 1 4  2  2  1];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I would like to find a way to combine all entries where the &lt;br&gt;
&amp;gt; width was the same, finding the total weight, like below.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; combined_width  = [1 4 5 6 10 16];&lt;br&gt;
&amp;gt; combined_weight = [1 3 1 1 8  1];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I have to do this a million times or so and was hoping to &lt;br&gt;
&amp;gt; do it efficiently. Any ideas on how to vectorize something &lt;br&gt;
&amp;gt; like this?&lt;br&gt;
&lt;br&gt;
We used to do this with the &quot;sparse&quot; function, which had the neat side&lt;br&gt;
effect of summing any values that were specified with repeat indices.&lt;br&gt;
Now there is a dedicated function for it: accumarray.&lt;br&gt;
&lt;br&gt;
[combined_width, a, b] = unique(width);&lt;br&gt;
combined_weight=accumarray(b', weight).';&lt;br&gt;
&lt;br&gt;
-Peter</description>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 13:21:38 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443385</link>
      <author>Steven Lord</author>
      <description>&lt;br&gt;
&quot;jay vaughan&quot; &amp;lt;jvaughan5.nospam@gmail.com&amp;gt; wrote in message &lt;br&gt;
news:g5k9qk$kc5$1@fred.mathworks.com...&lt;br&gt;
&amp;gt; Hi,&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I am trying to find a way to combine data without using a&lt;br&gt;
&amp;gt; loop. My data are similar to the following.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; width  = [1 4 4 5 6 10 10 10 16];&lt;br&gt;
&amp;gt; weight = [1 1 2 1 1 4  2  2  1];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I would like to find a way to combine all entries where the&lt;br&gt;
&amp;gt; width was the same, finding the total weight, like below.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; combined_width  = [1 4 5 6 10 16];&lt;br&gt;
&amp;gt; combined_weight = [1 3 1 1 8  1];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I have to do this a million times or so and was hoping to&lt;br&gt;
&amp;gt; do it efficiently. Any ideas on how to vectorize something&lt;br&gt;
&amp;gt; like this?&lt;br&gt;
&lt;br&gt;
Use ACCUMARRAY.  If your widths are not integers, UNIQUE them and use the &lt;br&gt;
unique indices to construct the subs input.&lt;br&gt;
&lt;br&gt;
-- &lt;br&gt;
Steve Lord&lt;br&gt;
slord@mathworks.com </description>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 16:57:04 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#443425</link>
      <author>jay vaughan</author>
      <description>&quot;Steven Lord&quot; &amp;lt;slord@mathworks.com&amp;gt; wrote in message &amp;lt;g5ksl2&lt;br&gt;
$ij3$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &quot;jay vaughan&quot; &amp;lt;jvaughan5.nospam@gmail.com&amp;gt; wrote in &lt;br&gt;
message &lt;br&gt;
&amp;gt; news:g5k9qk$kc5$1@fred.mathworks.com...&lt;br&gt;
&amp;gt; &amp;gt; Hi,&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I am trying to find a way to combine data without using &lt;br&gt;
a&lt;br&gt;
&amp;gt; &amp;gt; loop. My data are similar to the following.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; width  = [1 4 4 5 6 10 10 10 16];&lt;br&gt;
&amp;gt; &amp;gt; weight = [1 1 2 1 1 4  2  2  1];&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I would like to find a way to combine all entries where &lt;br&gt;
the&lt;br&gt;
&amp;gt; &amp;gt; width was the same, finding the total weight, like &lt;br&gt;
below.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; combined_width  = [1 4 5 6 10 16];&lt;br&gt;
&amp;gt; &amp;gt; combined_weight = [1 3 1 1 8  1];&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I have to do this a million times or so and was hoping &lt;br&gt;
to&lt;br&gt;
&amp;gt; &amp;gt; do it efficiently. Any ideas on how to vectorize &lt;br&gt;
something&lt;br&gt;
&amp;gt; &amp;gt; like this?&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Use ACCUMARRAY.  If your widths are not integers, UNIQUE &lt;br&gt;
them and use the &lt;br&gt;
&amp;gt; unique indices to construct the subs input.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; -- &lt;br&gt;
&amp;gt; Steve Lord&lt;br&gt;
&amp;gt; slord@mathworks.com &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&lt;br&gt;
Thanks Peter and Steve, accumarray works great!&lt;br&gt;
J</description>
    </item>
    <item>
      <pubDate>Mon, 21 Jul 2008 23:09:43 -0400</pubDate>
      <title>Re: combine data?</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/172635#444442</link>
      <author>Rune Allnor</author>
      <description>On 16 Jul, 12:37, Rune Allnor &amp;lt;all...@tele.ntnu.no&amp;gt; wrote:&lt;br&gt;
&amp;gt; On 16 Jul, 10:00, &quot;jay vaughan&quot; &amp;lt;jvaughan5.nos...@gmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Hi,&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I am trying to find a way tocombinedatawithout using a&lt;br&gt;
&amp;gt; &amp;gt; loop.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Sigh... the vixen of vectorisation in all her splendour...&lt;br&gt;
&lt;br&gt;
It took a little bit of time to get this test done, but&lt;br&gt;
at last some hard facts.&lt;br&gt;
&lt;br&gt;
I implemented the three algorithms suggested in this thread:&lt;br&gt;
Peter and Steven's use of ACCUMARRAY, my matlab code and&lt;br&gt;
my C++ MEX program.&lt;br&gt;
&lt;br&gt;
Below is the report from the profiler (R2006a) as well as&lt;br&gt;
the code for the various files. My 'naive' matlab code&lt;br&gt;
runs in half the time of the 'terse' code by Peter &amp;&lt;br&gt;
Steven - note that it is the call to UNIQUE which&lt;br&gt;
takes the most time. My C++ MEX code runs in 10% of that&lt;br&gt;
time again.&lt;br&gt;
&lt;br&gt;
The C++ code is likely to become relatively slower&lt;br&gt;
when there are a lot of different 'width' classes&lt;br&gt;
(there are only 11 below); if there are only one or&lt;br&gt;
two weights per width, the C++ code might in fact become&lt;br&gt;
slower than alt least the 'naive' matlab code.&lt;br&gt;
&lt;br&gt;
Conclusions? Don't mistake the number of typed&lt;br&gt;
characters for run-time efficiency...&lt;br&gt;
&lt;br&gt;
Rune&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
%%%%%  Profiler report   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
Function                   Calls Total time Self-time&lt;br&gt;
&lt;br&gt;
test                         1   0.698 s    0.070 s&lt;br&gt;
unique                       2   0.458 s    0.458 s&lt;br&gt;
alt2  (Peter &amp; Steven)       1   0.386 s    0.027 s&lt;br&gt;
alt1  (Rune)                 1   0.213 s    0.113 s&lt;br&gt;
dataweights (MEX-function)   1   0.029 s    0.029 s&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
%%%%%%   test.m   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
function test&lt;br&gt;
&lt;br&gt;
N = 10;&lt;br&gt;
M = 1000000;&lt;br&gt;
width=int32(rand(M,1)*N);&lt;br&gt;
weight=rand(M,1);&lt;br&gt;
&lt;br&gt;
[wid1,wei1]=dataweights(width,weight);&lt;br&gt;
[wid2,wei2]=alt1(width,weight);&lt;br&gt;
[wid3,wei3]=alt2(width,weight);&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
%%%%%%   alt1.m   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
function [wiv,wev]=alt1(width,weight)&lt;br&gt;
&lt;br&gt;
wiv = unique(width);&lt;br&gt;
wev = zeros(size(wiv));&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
for n=1:length(wev)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;idx=find(width==wiv(n));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;wev(n)=sum(weight(idx));&lt;br&gt;
end&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
%%%%%%   alt2.m   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
function [wid,wei]=alt2(width,weight);&lt;br&gt;
&lt;br&gt;
[wid, a, b] = unique(width);&lt;br&gt;
wei=accumarray(b, weight).';&lt;br&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br&gt;
&lt;br&gt;
///  dataweights.cpp  //////////////////////////////////////////////&lt;br&gt;
#include&amp;lt;map&amp;gt;&lt;br&gt;
#include &quot;mex.h&quot;&lt;br&gt;
&lt;br&gt;
using namespace std;&lt;br&gt;
&lt;br&gt;
extern void _main();&lt;br&gt;
&lt;br&gt;
void mexFunction(&lt;br&gt;
		 int          nlhs,&lt;br&gt;
		 mxArray      *plhs[],&lt;br&gt;
		 int          nrhs,&lt;br&gt;
		 const mxArray *prhs[]&lt;br&gt;
		 )&lt;br&gt;
{&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (nrhs != 2)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt(&quot;Function requires two arguments&quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (nlhs != 2)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt(&quot;Function returns two results&quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((mxGetClassID(prhs[0]) != mxINT32_CLASS)||&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(mxIsComplex(prhs[0])==true))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt(&quot;Argument 1 must be real int32&quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((mxGetClassID(prhs[1]) != mxDOUBLE_CLASS)||&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(mxIsComplex(prhs[1])==true))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt(&quot;Argument 2 must be real doubles&quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int MWeights = mxGetM(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int NWeights = mxGetN(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int MWidths = mxGetM(prhs[1]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int NWidths = mxGetN(prhs[1]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!((NWeights == 1) &amp;&amp;(NWidths == 1)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt(&quot;Arguments must be column vectors&quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (MWeights != MWidths)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt(&quot;Arguments must be same lengths&quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::map&amp;lt;int,double&amp;gt; data;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int* weight = (int*)mxGetData(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double* widths = (double*)mxGetData(prhs[1]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int n=0;n&amp;lt;MWeights;n++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[weight[n]]+=widths[n];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int dims[2];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dims[0]=data.size();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dims[1]=1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plhs[0]=mxCreateNumericArray(2,dims,mxINT32_CLASS,mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plhs[1]=mxCreateNumericArray(2,dims,mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;weight = (int*)mxGetData(plhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;widths = (double*)mxGetData(plhs[1]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::map&amp;lt;int,double&amp;gt;::const_iterator j;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (j=data.begin();j!=data.end();++j)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;weight[i]=(*j).first;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;widths[i]=(*j).second;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br&gt;
}&lt;br&gt;
///////////////////////////////////////////////////////////////////</description>
    </item>
  </channel>
</rss>

