@Override public Vector plus(double x) { return delegate.plus(x); }
@Override public Vector plus(Vector x) { return delegate.plus(x); }
@Override public Vector plus(double x) { return delegate.plus(x); }
@Override public Vector plus(Vector x) { return delegate.plus(x); }
@Override public Vector sample() { Vector v = new DenseVector(dimension).assign( new DoubleFunction() { @Override public double apply(double ignored) { return gen.nextGaussian(); } } ); if (mean != null) { if (scale != null) { return scale.times(v).plus(mean); } else { return v.plus(mean); } } else { if (scale != null) { return scale.times(v); } else { return v; } } }
@Test(expected = CardinalityException.class) public void testPlusVectorCardinality() { test.plus(new DenseVector(test.size() + 1)); }
@Test(expected = CardinalityException.class) public void testPlusVectorCardinality() { test.plus(new DenseVector(test.size() + 1)); }
@Test public void testPlusDouble() throws Exception { Vector val = test.plus(1); assertEquals("size", 3, val.size()); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', values[OFFSET + i] + 1, val.get(i), EPSILON); } }
@Test public void testPlusVector() throws Exception { Vector val = test.plus(test); assertEquals("size", 3, val.size()); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', values[OFFSET + i] * 2, val.get(i), EPSILON); } }
@Test public void testPlusDouble() { Vector val = test.plus(1); assertEquals("size", test.size(), val.size()); for (int i = 0; i < test.size(); i++) { if (i % 2 == 0) { assertEquals("get [" + i + ']', 1.0, val.get(i), EPSILON); } else { assertEquals("get [" + i + ']', values[i/2] + 1.0, val.get(i), EPSILON); } } }
@Test public void testPlusVector() { Vector val = test.plus(test); assertEquals("size", test.size(), val.size()); for (int i = 0; i < test.size(); i++) { if (i % 2 == 0) { assertEquals("get [" + i + ']', 0.0, val.get(i), EPSILON); } else { assertEquals("get [" + i + ']', values[i/2] * 2.0, val.get(i), EPSILON); } } }
@Test public void testSmallDistances() { for (double fuzz : new double[]{1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8, 1.0e-9, 1.0e-10}) { MultiNormal x = new MultiNormal(fuzz, new ConstantVector(0, 20)); for (int i = 0; i < 10000; i++) { final T v1 = vectorToTest(20); Vector v2 = v1.plus(x.sample()); if (1 + fuzz * fuzz > 1) { String msg = String.format("fuzz = %.1g, >", fuzz); assertTrue(msg, v1.getDistanceSquared(v2) > 0); assertTrue(msg, v2.getDistanceSquared(v1) > 0); } else { String msg = String.format("fuzz = %.1g, >=", fuzz); assertTrue(msg, v1.getDistanceSquared(v2) >= 0); assertTrue(msg, v2.getDistanceSquared(v1) >= 0); } } } }
@Test public void testProjection() { Vector v1 = new DenseVector(10).assign(Functions.random()); WeightedVector v2 = new WeightedVector(v1, v1, 31); assertEquals(v1.dot(v1), v2.getWeight(), 1.0e-13); assertEquals(31, v2.getIndex()); Matrix y = new DenseMatrix(10, 4).assign(Functions.random()); Matrix q = new QRDecomposition(y.viewPart(0, 10, 0, 3)).getQ(); Vector nullSpace = y.viewColumn(3).minus(q.times(q.transpose().times(y.viewColumn(3)))); WeightedVector v3 = new WeightedVector(q.viewColumn(0).plus(q.viewColumn(1)), nullSpace, 1); assertEquals(0, v3.getWeight(), 1.0e-13); Vector qx = q.viewColumn(0).plus(q.viewColumn(1)).normalize(); WeightedVector v4 = new WeightedVector(qx, q.viewColumn(0), 2); assertEquals(Math.sqrt(0.5), v4.getWeight(), 1.0e-13); WeightedVector v5 = WeightedVector.project(q.viewColumn(0), qx); assertEquals(Math.sqrt(0.5), v5.getWeight(), 1.0e-13); }
@Test public void testMinus() { Vector val = test.minus(test); assertEquals("size", test.size(), val.size()); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', 0.0, val.get(i), EPSILON); } val = test.minus(test).minus(test); assertEquals("cardinality", test.size(), val.size()); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', 0.0, val.get(i) + test.get(i), EPSILON); } Vector val1 = test.plus(1); val = val1.minus(test); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', 1.0, val.get(i), EPSILON); } val1 = test.plus(-1); val = val1.minus(test); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', -1.0, val.get(i), EPSILON); } }
@Test public void testUpdate() { MultiNormal f = new MultiNormal(20); Vector a = f.sample(); Vector b = f.sample(); Vector c = f.sample(); DenseVector x = new DenseVector(a); Centroid x1 = new Centroid(1, x); x1.update(new Centroid(2, new DenseVector(b))); Centroid x2 = new Centroid(x1); x1.update(c); // check for correct value Vector mean = a.plus(b).plus(c).assign(Functions.div(3)); assertEquals(0, x1.getVector().minus(mean).norm(1), 1.0e-8); assertEquals(3, x1.getWeight(), 0); assertEquals(0, x2.minus(a.plus(b).divide(2)).norm(1), 1.0e-8); assertEquals(2, x2.getWeight(), 0); assertEquals(0, new Centroid(x1.getIndex(), x1, x1.getWeight()).minus(x1).norm(1), 1.0e-8); // and verify shared storage assertEquals(0, x.minus(x1).norm(1), 0); assertEquals(3, x1.getWeight(), 1.0e-8); assertEquals(1, x1.getIndex()); }
Vector sv2 = new RandomAccessSparseVector(v2); assertEquals(0, dv1.plus(dv2).getDistanceSquared(v1.plus(v2)), FUZZ); assertEquals(0, dv1.plus(dv2).getDistanceSquared(v1.plus(dv2)), FUZZ); assertEquals(0, dv1.plus(dv2).getDistanceSquared(v1.plus(sv2)), FUZZ); assertEquals(0, dv1.plus(dv2).getDistanceSquared(sv1.plus(v2)), FUZZ); assertEquals(0, dv1.divide(z).getDistanceSquared(v1.divide(z)), 1.0e-12); assertEquals(0, dv1.times(z).getDistanceSquared(v1.times(z)), 1.0e-12); assertEquals(0, dv1.plus(z).getDistanceSquared(v1.plus(z)), 1.0e-12); assertEquals(0, v1.plus(-3.1).norm(1), FUZZ); v1.assign(dv1); assertEquals(0, v1.getDistanceSquared(dv1), FUZZ);
public void reduce(VarLongWritable key, Iterable<VectorWritable> values, Context context) throws IOException, InterruptedException { Vector partial = null; for (VectorWritable vectorWritable : values) { partial = partial == null ? vectorWritable.get() : partial .plus(vectorWritable.get()); } context.write(key, new VectorWritable(partial)); } }
private Vector penaltyGradient(){ Vector weightsVector = this.logisticRegression.getWeights().getAllWeights(); Vector penalty = new DenseVector(weightsVector.size()); penalty = penalty.plus(weightsVector.divide(priorGaussianVariance)); for (int j:logisticRegression.getWeights().getAllBiasPositions()){ penalty.set(j,0); } return penalty; }