public void CalculateEuclideanCentroid() { // Init input gene arrays. var connGenes1 = new ConnectionGenes <double>(6); connGenes1[0] = (0, 1, 1.0); connGenes1[1] = (0, 2, 2.0); connGenes1[2] = (2, 2, 3.0); connGenes1[3] = (2, 4, 4.0); connGenes1[4] = (2, 5, 5.0); connGenes1[5] = (3, 0, 6.0); var connGenes2 = new ConnectionGenes <double>(8); connGenes2[0] = (0, 1, 10.0); connGenes2[1] = (0, 3, 20.0); connGenes2[2] = (2, 2, 30.0); connGenes2[3] = (2, 3, 40.0); connGenes2[4] = (2, 5, 50.0); connGenes2[5] = (2, 6, 60.0); connGenes2[6] = (3, 0, 70.0); connGenes2[7] = (4, 5, 80.0); var connGenes3 = new ConnectionGenes <double>(2); connGenes3[0] = (2, 5, 100.0); connGenes3[1] = (10, 20, 200.0); var arr = new ConnectionGenes <double>[] { connGenes1, connGenes2, connGenes3 }; // Calc centroid. ConnectionGenes <double> centroid = DistanceMetricUtils.CalculateEuclideanCentroid(arr); // Expected centroid. var expected = new ConnectionGenes <double>(11); expected[0] = (0, 1, 11 / 3.0); expected[1] = (0, 2, 2 / 3.0); expected[2] = (0, 3, 20 / 3.0); expected[3] = (2, 2, 33 / 3.0); expected[4] = (2, 3, 40 / 3.0); expected[5] = (2, 4, 4 / 3.0); expected[6] = (2, 5, 155 / 3.0); expected[7] = (2, 6, 60 / 3.0); expected[8] = (3, 0, 76 / 3.0); expected[9] = (4, 5, 80 / 3.0); expected[10] = (10, 20, 200 / 3.0); Assert.True(SpanUtils.Equal <DirectedConnection>(expected._connArr, centroid._connArr)); Assert.True(ArrayTestUtils.ConponentwiseEqual(expected._weightArr, centroid._weightArr, 1e-6)); }
/// <summary> /// Calculates the centroid for a set of points. /// </summary> /// <param name="pointList">The set of points.</param> /// <returns>A new instance of <see cref="ConnectionGenes{T}"/>.</returns> public ConnectionGenes <double> CalculateCentroid(IList <ConnectionGenes <double> > pointList) { return(DistanceMetricUtils.CalculateEuclideanCentroid(pointList)); }