code: public double[] dot(Vec x, List<Double> qi)
      {
          double[] dots = new double[points.size()];
          final List<Vec> vecs = points.get(0).vecs;
          final List<Double> cache = points.get(0).kernelAccel;
          for(int i = 0; i < vecs.size(); i++)
          {
              double k_ix = k.eval(i, x, qi, vecs, cache);
              for(int j = 0; j < points.size(); j++)
              {
                  double alpha = points.get(j).alpha.getD(i);
                  if(alpha != 0)
                      dots[j] += k_ix*alpha;
              }
          }
          return dots;
      }
docs: Computes the dot product between each KernelPoint in this set and the
  given vector in the kernel space. The results are equivalent to an array
  and setting each value using
  {@link #dot(int, jsat.linear.Vec, java.util.List)  } <br>
  This method should be faster than computing the dot products individual
  since it avoids redundant kernel computations
  
  @param x the vector to contribute to the dot product
  @param qi the query information for the vector, or {@code null} only if
  the kernel in use does not support acceleration.
  @return an array where the <i>i'th</i> index contains the dot product of
  the <i>i'th</i> KernelPoint and the given vector