示例#1
0
        public void Test_ReadWrite()
        {
            KMeansNode n = new KMeansNode(2, 0);

            n.Center[0]      = 1.111;
            n.Center[1]      = 2.222;
            n.ValueMin[0]    = 0.1;
            n.ValueMin[1]    = 0.2;
            n.ValueBounds[0] = 0.8;
            n.ValueBounds[1] = 0.6;

            MemoryStream ms = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(ms);

            n.Write(bw);
            byte [] buff = ms.ToArray();
            ms = new MemoryStream(buff);
            BinaryReader br = new BinaryReader(ms);
            KMeansNode   n1 = new KMeansNode();

            n1.Read(br, n1.SerializationFormatVersion);
            Assert.AreEqual(n.Center, n1.Center);
            Assert.AreEqual(n.ValueMin, n1.ValueMin);
            Assert.AreEqual(n.ValueBounds, n1.ValueBounds);
            Assert.AreEqual(n.Children, n1.Children);
        }
示例#2
0
        public void Test_FindClosestChild()
        {
            KMeansNode root = new KMeansNode(2, 4);

            root.Children.Fill(i => new KMeansNode(2, 0));

            root.Children[0].Center[0] = 0.4922;
            root.Children[0].Center[1] = -0.4344;
            root.Children[1].Center[0] = -0.062;
            root.Children[1].Center[1] = 0.856;
            root.Children[2].Center[0] = 0.8567;
            root.Children[2].Center[1] = 0.5;
            root.Children[3].Center[0] = -0.6567;
            root.Children[3].Center[1] = 0.07333;

            // 2-d data points.
            double[] data = new double[]
            {
                -0.29, 0.17,
                0.56, -0.36,
                0.90, -0.18,
                0.92, 0.47,
                0.16, 0.04,
                0.30, -0.08,
                0.10, 0.88,
                0.74, 0.16,
                0.07, -0.82,
                0.60, -0.55,
                0.18, -0.64,
                0.74, -0.94,
                -0.97, -0.22,
                0.91, 0.87,
                0.92, -0.38,
                -0.71, 0.27,
                -0.51, 0.98,
                0.13, 0.92,
                -0.08, 0.61,
                0.05, 0.89
            };

            int[] expClosestCenters = new int[] { 3, 0, 0, 2, 0, 0, 1, 2, 0, 0, 0, 0, 3, 2, 0, 3, 1, 1, 1, 1 };

            for (int p = 0; p < data.Length / 2; p++)
            {
                double[] point   = new double[] { data[2 * p], data[2 * p + 1] };
                int      closest = root.FindClosestChild(point, false);
                Assert.AreEqual(expClosestCenters[p], closest, p.ToString());
            }
        }