The most efficient way is probably to just add them.

You can also use assign with a max function.  Or you can write a special
function if you want the left vector or the right one to have preference.

      Vector a, b;
      // method 1
      a.plus(b);
      // method 2
      a.assign(b, Functions.MAX);
      // method 3
      a.assign(b, new DoubleDoubleFunction() {
          @Override
          public double apply(double arg1, double arg2) {
              return arg1 > 0 ? arg1 : arg2;
          }
      });

The assignment approaches have the problem that they not operate in a
sparse fashion except for a few known functions.  It would be very easy to
extend the DoubleDoubleFunction so that there is a
isSparseFriendly() method or to introduce a new
SparseFriendlyDoubleDoubleFunction class to determine whether it would be
safe to do the iteration in a sparse fashion.  The last example would
become:

      a.assign(b, new SparseFriendlyDoubleDoubleFunction() {
          @Override
          public double apply(double arg1, double arg2) {
              return arg2 != 0 ? arg2 : arg1;
          }
      });

MAX is not a sparse friendly function, of course since max(x,0) != 0 in
general.

On Thu, Nov 29, 2012 at 2:24 PM, Stefan Kreuzer <[email protected]>wrote:

> Hello,
>
> I dont understand what is the best way to concatenate (or merge) two
> sparse vectors.
> I.e. given two sparse vectors
> {8:0.027,38:0.037,67:0.027}
> and
> {86:0.032,87:01042}
> I need to build a new vector that contains all the values of the two:
> {8:0.027,38:0.037,67:0.027,86:0.032,87:01042}
>
> What is the best / most efficient way to achieve this in Mahout?
>
> Best Regards
> Stefan
>

Reply via email to