org.apache.mahout.math.Vector.norm()方法的使用及代码示例

x33g5p2x  于2022-02-01 转载在 其他  
字(10.9k)|赞(0)|评价(0)|浏览(65)

本文整理了Java中org.apache.mahout.math.Vector.norm()方法的一些代码示例,展示了Vector.norm()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Vector.norm()方法的具体详情如下:
包路径:org.apache.mahout.math.Vector
类名称:Vector
方法名:norm

Vector.norm介绍

[英]Return the k-norm of the vector.

See http://en.wikipedia.org/wiki/Lp_space

Technically, when 0 > power < 1, we don't have a norm, just a metric, but we'll overload this here. Also supports power == 0 (number of non-zero elements) and power = Double#POSITIVE_INFINITY (max element). Again, see the Wikipedia page for more info.
[中]返回向量的k-范数。
看见http://en.wikipedia.org/wiki/Lp_space
从技术上讲,当0>power<1时,我们没有一个范数,只有一个度量,但我们会在这里重载它。还支持power==0(非零元素的数量)和power=Double#正_无穷大(max元素)。同样,更多信息请参见维基百科页面。

代码示例

代码示例来源:origin: apache/mahout

@Override
public double norm(double power) {
 return delegate.norm(power);
}

代码示例来源:origin: apache/mahout

@Override
public double norm(double power) {
 return delegate.norm(power);
}

代码示例来源:origin: apache/mahout

protected static double calculateScaleFactor(Vector nextVector) {
 return nextVector.norm(2);
}

代码示例来源:origin: apache/mahout

@Override
public EigenStatus verify(VectorIterable corpus, Vector vector) {
 Vector resultantVector = corpus.timesSquared(vector);
 double newNorm = resultantVector.norm(2);
 double oldNorm = vector.norm(2);
 double eigenValue;
 double cosAngle;
 if (newNorm > 0 && oldNorm > 0) {
  eigenValue = newNorm / oldNorm;
  cosAngle = resultantVector.dot(vector) / newNorm * oldNorm;
 } else {
  eigenValue = 1.0;
  cosAngle = 0.0;
 }
 return new EigenStatus(eigenValue, cosAngle, false);
}

代码示例来源:origin: apache/mahout

/**
 * You have to start somewhere...
 * TODO: start instead wherever you find a vector with maximum residual length after subtracting off the projection
 * TODO: onto all previous eigenvectors.
 *
 * @param corpus the corpus matrix
 * @param eigens not currently used, but should be (see above TODO)
 * @return the index into the corpus where the "starting seed" input vector lies.
 */
private int getRandomStartingIndex(Matrix corpus, Matrix eigens) {
 int index;
 Vector v;
 do {
  double r = rng.nextDouble();
  index = (int) (r * corpus.numRows());
  v = corpus.viewRow(index);
 } while (v == null || v.norm(2) == 0 || v.getNumNondefaultElements() < 5);
 return index;
}

代码示例来源:origin: apache/mahout

public static void assertOrthonormal(Matrix currentEigens, double errorMargin) {
 List<String> nonOrthogonals = Lists.newArrayList();
 for (int i = 0; i < currentEigens.numRows(); i++) {
  Vector ei = currentEigens.viewRow(i);
  for (int j = 0; j <= i; j++) {
   Vector ej = currentEigens.viewRow(j);
   if (ei.norm(2) == 0 || ej.norm(2) == 0) {
    continue;
   }
   double dot = ei.dot(ej);
   if (i == j) {
    assertTrue("not norm 1 : " + dot + " (eigen #" + i + ')', Math.abs(1.0 - dot) < errorMargin);
   } else {
    if (Math.abs(dot) > errorMargin) {
     log.info("not orthogonal : {} (eigens {}, {})", dot, i, j);
     nonOrthogonals.add("(" + i + ',' + j + ')');
    }
   }
  }
  log.info("{}:{}", nonOrthogonals.size(), nonOrthogonals);
 }
}

代码示例来源:origin: apache/mahout

@Override
public Matrix assignColumn(int column, Vector other) {
 if (columnSize() != other.size()) {
  throw new IndexException(columnSize(), other.size());
 }
 if (other.viewPart(column + 1, other.size() - column - 1).norm(1) > 1.0e-14) {
  throw new IllegalArgumentException("Cannot set lower portion of triangular matrix to non-zero");
 }
 for (Vector.Element element : other.viewPart(0, column).all()) {
  setQuick(element.index(), column, element.get());
 }
 return this;
}

代码示例来源:origin: apache/mahout

public static Matrix randomHierarchicalMatrix(int numRows, int numCols, boolean symmetric) {
 Matrix matrix = new DenseMatrix(numRows, numCols);
 // TODO rejigger tests so that it doesn't expect this particular seed
 Random r = new Random(1234L);
 for (int row = 0; row < numRows; row++) {
  Vector v = new DenseVector(numCols);
  for (int col = 0; col < numCols; col++) {
   double val = r.nextGaussian();
   v.set(col, val);
  }
  v.assign(Functions.MULT, 1/((row + 1) * v.norm(2)));
  matrix.assignRow(row, v);
 }
 if (symmetric) {
  return matrix.times(matrix.transpose());
 }
 return matrix;
}

代码示例来源:origin: apache/mahout

private static void doTestAggregation(Vector v, Vector w) {
 assertEquals("aggregate(plus, pow(2)) not equal to " + v.getLengthSquared(),
   v.getLengthSquared(),
   v.aggregate(Functions.PLUS, Functions.pow(2)), EPSILON);
 assertEquals("aggregate(plus, abs) not equal to " + v.norm(1),
   v.norm(1),
   v.aggregate(Functions.PLUS, Functions.ABS), EPSILON);
 assertEquals("aggregate(max, abs) not equal to " + v.norm(Double.POSITIVE_INFINITY),
   v.norm(Double.POSITIVE_INFINITY),
   v.aggregate(Functions.MAX, Functions.ABS), EPSILON);
 assertEquals("v.dot(w) != v.aggregate(w, plus, mult)",
   v.dot(w),
   v.aggregate(w, Functions.PLUS, Functions.MULT), EPSILON);
 assertEquals("|(v-w)|^2 != v.aggregate(w, plus, chain(pow(2), minus))",
   v.minus(w).dot(v.minus(w)),
   v.aggregate(w, Functions.PLUS, Functions.chain(Functions.pow(2), Functions.MINUS)), EPSILON);
}

代码示例来源:origin: apache/mahout

@Test
  public void testRadius() {
    MultiNormal gen = new MultiNormal(0.1, new DenseVector(10));
    OnlineSummarizer s = new OnlineSummarizer();
    for (int i = 0; i < 10000; i++) {
      double x = gen.sample().norm(2) / Math.sqrt(10);
      s.add(x);
    }
    assertEquals(0.1, s.getMean(), 0.01);

  }
}

代码示例来源:origin: apache/mahout

@Test(expected = CardinalityException.class)
public void testTimesVector() {
 Vector vectorA = new DenseVector(vectorAValues);
 Vector testTimesVectorA = test.times(vectorA);
 Vector expected = new DenseVector(new double[]{5.0, 11.0, 17.0});
 assertTrue("Matrix times vector not equals: " + vectorA + " != " + testTimesVectorA,
   expected.minus(testTimesVectorA).norm(2) < 1.0e-12);
 test.times(testTimesVectorA);
}

代码示例来源:origin: apache/mahout

@Test
 public void random() {
  Matrix m = new DenseMatrix(200, 30).assign(Functions.random());

  Vector b = new DenseVector(200).assign(1);

  LSMR r = new LSMR();
  Vector x1 = r.solve(m, b);

//    assertEquals(0, m.times(x1).minus(b).norm(2), 1.0e-2);
  double norm = new SingularValueDecomposition(m).getS().viewDiagonal().norm(2);
  double actual = m.transpose().times(m).times(x1).minus(m.transpose().times(b)).norm(2);
  System.out.printf("%.4f\n", actual / norm * 1.0e6);
  assertEquals(0, actual, norm * 1.0e-5);

  // and we need to check that the error estimates are pretty good.
  assertEquals(m.times(x1).minus(b).norm(2), r.getResidualNorm(), 1.0e-5);
  assertEquals(actual, r.getNormalEquationResidual(), 1.0e-9);
 }

代码示例来源:origin: apache/mahout

@Test
 public void testSwap() {
  Matrix m = new DenseMatrix(10, 10);
  for (int i = 0; i < 10; i++) {
   for (int j = 0; j < 10; j++) {
    m.set(i, j, 10 * i + j);
   }
  }

  PivotedMatrix pm = new PivotedMatrix(m);

  pm.swap(3, 5);

  assertEquals(0, pm.viewDiagonal().minus(
    new DenseVector(new double[]{0, 11, 22, 55, 44, 33, 66, 77, 88, 99})).norm(1), 1.0e-10);

  pm.swap(2, 7);
  assertEquals(0, pm.viewDiagonal().minus(
    new DenseVector(new double[]{0, 11, 77, 55, 44, 33, 66, 22, 88, 99})).norm(1), 1.0e-10);

  pm.swap(5, 8);
  assertEquals(0, pm.viewColumn(4).minus(
    new DenseVector(new double[]{4.0,14.0,74.0,54.0,44.0,84.0,64.0,24.0,34.0,94.0})).norm(1), 1.0e-10);
  assertEquals(0, pm.viewDiagonal().minus(
    new DenseVector(new double[]{0, 11, 77, 55, 44, 88, 66, 22, 33, 99})).norm(1), 1.0e-10);
 }
}

代码示例来源:origin: apache/mahout

@Test
public void testTimesSquaredTimesVector() {
 Vector vectorA = new DenseVector(vectorAValues);
 Vector ttA = test.timesSquared(vectorA);
 Vector ttASlow = test.transpose().times(test.times(vectorA));
 assertTrue("M'Mv != M.timesSquared(v): " + ttA + " != " + ttASlow,
   ttASlow.minus(ttA).norm(2) < 1.0e-12);
}

代码示例来源:origin: apache/mahout

@Test
public void testBasics() {
 Matrix a = new DenseSymmetricMatrix(new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, false);
 System.out.println(a.toString());
 assertEquals(0, a.viewDiagonal().minus(new DenseVector(new double[]{1, 5, 8, 10})).norm(1), 1.0e-10);
 assertEquals(0, a.viewPart(0, 3, 1, 3).viewDiagonal().minus(
   new DenseVector(new double[]{2, 6, 9})).norm(1), 1.0e-10);
 assertEquals(4, a.get(0, 3), 1.0e-10);
 System.out.println(a);
 Matrix m = new DenseMatrix(4, 4).assign(a);
 assertEquals(0, m.minus(a).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
 System.out.println(m);
 assertEquals(0, m.transpose().times(m).minus(a.transpose().times(a)).aggregate(
   Functions.PLUS, Functions.ABS), 1.0e-10);
 System.out.println(a.plus(a));
 assertEquals(0, m.plus(m).minus(a.plus(a)).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
}

代码示例来源:origin: apache/mahout

@Test
public void testDeficientRank() {
 Matrix a = new DenseMatrix(10, 3).assign(new DoubleFunction() {
  private final Random gen = RandomUtils.getRandom();
  @Override
  public double apply(double arg1) {
   return gen.nextGaussian();
  }
 });
 a = a.transpose().times(a);
 EigenDecomposition eig = new EigenDecomposition(a);
 Matrix d = eig.getD();
 Matrix v = eig.getV();
 check("EigenvalueDecomposition (rank deficient)...", a.times(v), v.times(d));
 Assert.assertEquals(0, eig.getImagEigenvalues().norm(1), 1.0e-10);
 Assert.assertEquals(3, eig.getRealEigenvalues().norm(0), 1.0e-10);
}

代码示例来源:origin: apache/mahout

@Test
 public void testSetData() throws IOException {
  File f = File.createTempFile("matrix", ".m", getTestTempDir());
  f.deleteOnExit();

  Matrix m0 = new DenseMatrix(100000, 30);
  MultiNormal gen = new MultiNormal(30);
  for (MatrixSlice row : m0) {
   row.vector().assign(gen.sample());
  }
  FileBasedMatrix.writeMatrix(f, m0);

  FileBasedMatrix m = new FileBasedMatrix(100000, 30);
  m.setData(f, true);

  assertEquals(0, m0.minus(m).aggregate(Functions.MAX, Functions.ABS), 1.0e-8);

  int i = 0;
  for (MatrixSlice row : m) {
   assertEquals(0, row.vector().minus(m0.viewRow(i++)).norm(1), 1.0e-8);
  }
 }
}

代码示例来源:origin: apache/mahout

@Test
public void testBasics() {
 Matrix a = new UpperTriangular(new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, false);
 assertEquals(0, a.viewDiagonal().minus(new DenseVector(new double[]{1, 5, 8, 10})).norm(1), 1.0e-10);
 assertEquals(0, a.viewPart(0, 3, 1, 3).viewDiagonal().minus(
   new DenseVector(new double[]{2, 6, 9})).norm(1), 1.0e-10);
 assertEquals(4, a.get(0, 3), 1.0e-10);
 print(a);
 Matrix m = new DenseMatrix(4, 4).assign(a);
 assertEquals(0, m.minus(a).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
 print(m);
 assertEquals(0, m.transpose().times(m).minus(a.transpose().times(a)).aggregate(
   Functions.PLUS, Functions.ABS), 1.0e-10);
 assertEquals(0, m.plus(m).minus(a.plus(a)).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
}

代码示例来源:origin: apache/mahout

@Test
public void randomMatrix() {
 Matrix a = new DenseMatrix(60, 60).assign(Functions.random());
 QRDecomposition qr = new QRDecomposition(a);
 // how close is Q to actually being orthornormal?
 double maxIdent = qr.getQ().transpose().times(qr.getQ()).viewDiagonal().assign(Functions.plus(-1)).norm(1);
 assertEquals(0, maxIdent, 1.0e-13);
 // how close is Q R to the original value of A?
 Matrix z = qr.getQ().times(qr.getR()).minus(a);
 double maxError = z.aggregate(Functions.MIN, Functions.ABS);
 assertEquals(0, maxError, 1.0e-13);
}

代码示例来源:origin: apache/mahout

@Test
public void testBasics() {
 DiagonalMatrix a = new DiagonalMatrix(new double[]{1, 2, 3, 4});
 assertEquals(0, a.viewDiagonal().minus(new DenseVector(new double[]{1, 2, 3, 4})).norm(1), 1.0e-10);
 assertEquals(0, a.viewPart(0, 3, 0, 3).viewDiagonal().minus(
  new DenseVector(new double[]{1, 2, 3})).norm(1), 1.0e-10);
 assertEquals(4, a.get(3, 3), 1.0e-10);
 Matrix m = new DenseMatrix(4, 4);
 m.assign(a);
 assertEquals(0, m.minus(a).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
 assertEquals(0, m.transpose().times(m).minus(a.transpose().times(a)).aggregate(
  Functions.PLUS, Functions.ABS), 1.0e-10);
 assertEquals(0, m.plus(m).minus(a.plus(a)).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
 m = new DenseMatrix(new double[][]{{1, 2, 3, 4}, {5, 6, 7, 8}});
 assertEquals(100, a.timesLeft(m).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
 assertEquals(100, a.times(m.transpose()).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10);
}

相关文章