public float[] GetOutput(float[] inputs)
 {
     float[] outputLayer1 = Numpy.forward(inputs, weightsLayer1, biasesLayer1);
     float[] outputLayer2 = Numpy.forward(outputLayer1, weightsLayer2, biasesLayer2);
     float[] output       = Numpy.dot(outputLayer2, outputWeights);
     return(output);
 }
Пример #2
0
        private static IEnumerable <Line> OctoSphereStartOLD(double alpha, int xLimit, int yLimit)
        {
            var origin     = new Vector3D(0, 0, 0);
            var planePoint = new Vector3D(1, 1, 0);
            var pointA     = new Vector3D(2, 0, 0);
            var pointB     = new Vector3D(0, 2, 0);
            var distanceFromOriginAtTheBase           = Vector3D.AbsoluteValue(planePoint - origin);
            var distanceFromOriginAtTheBaseOnTheXAxis = distanceFromOriginAtTheBase / Sin(45.0.ToRadian());
            var pointOnXAxisOnTheBase   = new Vector3D(distanceFromOriginAtTheBaseOnTheXAxis, 0.0, 0.0);
            var horizontalDistanceAtTop = Sqrt(8);
            var halfDistanceAtTop       = horizontalDistanceAtTop / 2;
            var horizontalDirection     = (planePoint - pointOnXAxisOnTheBase).Normalize();
            var halfPoint         = (0, 0, 2);
            var verticalDistance  = Vector3D.AbsoluteValue(planePoint - halfPoint);
            var verticalDirection = (planePoint - halfPoint).Normalize();
            var horizontalJumps   = Numpy.LinSpace(0, horizontalDistanceAtTop, xLimit).ToList();
            var verticalJumps     = Numpy.LinSpace(0, verticalDistance, yLimit).ToList();
            var midPoint          = (pointA + (horizontalJumps[xLimit / 2] * horizontalDirection)) + (verticalJumps[yLimit / 2] * verticalDirection);
            var mainDirection     = origin - midPoint;

            foreach (var horizontalJump in horizontalJumps)
            {
                var point = pointA + (horizontalJump * horizontalDirection);
                foreach (var verticalJump in verticalJumps)
                {
                    var finalPoint = point + (verticalJump * verticalDirection);
                    var direction  = RotateVector3D(mainDirection.X, mainDirection.Y, mainDirection.Z, alpha.ToRadian());
                    yield return(Line.FromPointAndDirection(finalPoint, direction));
                }
            }
        }
Пример #3
0
        private static IEnumerable <Line> CreateCylinderStartLines2(double alpha, int zLimit, int yLimit)
        {
            var b            = Sqrt(8) / 2;
            var alpha2       = 90 - alpha;
            var beta         = 180 - 45 - alpha2;
            var a            = 2 - Sin(alpha2.ToRadian()) / Sin(beta.ToRadian()) * b;
            var r            = CausticCylinder.R;
            var verticalLine = new Line((0, 0, -r), (-r, 0, 0));
            var distance     = Vector3D.AbsoluteValue(verticalLine.SecondPoint - verticalLine.BasePoint);
            var midpoint     = verticalLine.GetPointOnLine(distance / 2);

            var(xDir, yDir, zDir) = (-1, 0, -1 + a) - midpoint;

            var zRange = Numpy.LinSpace(0, distance, zLimit).ToList();
            var yRange = Numpy.LinSpace(0, CausticCylinder.L, yLimit).ToList();

            foreach (var z in zRange)
            {
                foreach (var y in yRange)
                {
                    var(x, y2, z2) = verticalLine.GetPointOnLine(z);
                    yield return(Line.FromPointAndDirection((x, y, z2), (xDir, yDir, zDir)));
                }
            }
        }
Пример #4
0
        private static IEnumerable <Line> OctoSphereStart(double alpha, int xLimit, int yLimit)
        {
            var xPoint   = new Vector3D(2, 0, 0);
            var yPoint   = new Vector3D(0, 2, 0);
            var topPoint = new Vector3D(0, 0, 2);

            var distance         = Vector3D.AbsoluteValue(yPoint - xPoint);
            var bottomLine       = new Line(xPoint, yPoint);
            var bottomPoint      = bottomLine.GetPointOnLine(distance / 2);
            var verticalDistance = Vector3D.AbsoluteValue(bottomPoint - topPoint);

            var horizontalDirection = (yPoint - xPoint).Normalize();
            var verticalDirection   = (topPoint - bottomPoint).Normalize();
            var mainDirection       = -1 * (new Plane(xPoint, yPoint, topPoint).NormalVector);

            var horizontalJumps = Numpy.LinSpace(0, distance, xLimit);
            var verticalJumps   = Numpy.LinSpace(0, verticalDistance, yLimit);

            foreach (var horizontalJump in horizontalJumps)
            {
                var horiPoint = xPoint + (horizontalJump * horizontalDirection);
                foreach (var verticalJump in verticalJumps)
                {
                    var finalPoint = horiPoint + (verticalJump * verticalDirection);
                    var direction  = RotateVector3D(mainDirection.X, mainDirection.Y, mainDirection.Z, alpha.ToRadian());
                    yield return(Line.FromPointAndDirection(finalPoint, direction));
                }
            }
        }
 public void Merge(Brain brain1, Brain brain2)
 {
     weightsLayer1 = Numpy.merge(brain1.weightsLayer1, brain2.weightsLayer1);
     biasesLayer1  = Numpy.merge(brain1.biasesLayer1, brain2.biasesLayer1);
     weightsLayer2 = Numpy.merge(brain1.weightsLayer2, brain2.weightsLayer2);
     biasesLayer2  = Numpy.merge(brain1.biasesLayer2, brain2.biasesLayer2);
     outputWeights = Numpy.merge(brain1.outputWeights, brain2.outputWeights);
 }
 public void Init()
 {
     weightsLayer1 = Numpy.rand(2, 20);
     biasesLayer1  = Numpy.rand(20);
     weightsLayer2 = Numpy.rand(20, 20);
     biasesLayer2  = Numpy.rand(20);
     outputWeights = Numpy.rand(20, 2);
 }
Пример #7
0
        public static void SetUp(string backend)
        {
            using (Py.GIL())
            {
                Numpy.Initialize();
                Matplotlib.Initialize(backend);

                //PythonEngine.Exec("import matplotlib;print(matplotlib.get_backend())");
                Console.WriteLine(Matplotlib.get_backend());
            }
        }
Пример #8
0
        private static IEnumerable <Line> OctoSphereTri()
        {
            const double alpha    = 0.0;
            var          xPoint   = new Vector3D(2, 0, 0);
            var          yPoint   = new Vector3D(0, 2, 0);
            var          topPoint = new Vector3D(0, 0, 2);

            var side1 = Vector3D.AbsoluteValue(yPoint - xPoint);
            var side2 = Vector3D.AbsoluteValue(topPoint - xPoint);
            var side3 = Vector3D.AbsoluteValue(topPoint - yPoint);
            var bigT  = Heron(side1, side2, side3);

            var distance         = Vector3D.AbsoluteValue(yPoint - xPoint);
            var bottomLine       = new Line(xPoint, yPoint);
            var bottomPoint      = bottomLine.GetPointOnLine(distance / 2);
            var verticalDistance = Vector3D.AbsoluteValue(bottomPoint - topPoint);

            var horizontalDirection = (yPoint - xPoint).Normalize();
            var verticalDirection   = (topPoint - bottomPoint).Normalize();
            var mainDirection       = -1 * (new Plane(xPoint, yPoint, topPoint).NormalVector);

            var horizontalJumps = Numpy.LinSpace(0, distance, 500);
            var verticalJumps   = Numpy.LinSpace(0, verticalDistance, 500);

            foreach (var horizontalJump in horizontalJumps)
            {
                var horiPoint = xPoint + (horizontalJump * horizontalDirection);
                foreach (var verticalJump in verticalJumps)
                {
                    var finalPoint = horiPoint + (verticalJump * verticalDirection);
                    var dist1      = Vector3D.AbsoluteValue(finalPoint - xPoint);
                    var dist2      = Vector3D.AbsoluteValue(finalPoint - yPoint);
                    var dist3      = Vector3D.AbsoluteValue(finalPoint - topPoint);

                    var T1 = Heron(side1, dist1, dist2);
                    var T2 = Heron(side2, dist1, dist3);
                    var T3 = Heron(side3, dist2, dist3);
                    var T  = T1 + T2 + T3;

                    var difference = Abs(bigT - T);
                    if (difference >= 0e-5)
                    {
                        yield return(Line.GetInvalid());
                    }
                    else
                    {
                        var direction = RotateVector3D(mainDirection.X, mainDirection.Y, mainDirection.Z, alpha.ToRadian());
                        yield return(Line.FromPointAndDirection(finalPoint, direction));
                    }
                }
            }
        }
Пример #9
0
            public static byte[] SaveFigureToArray(PyObject fig, int dpi = 200, string format = "png")
            {
                if (fig.GetPythonType().Handle != PltFigureType)
                {
                    throw new Exception("object is not a matplotlib Figure");
                }

                dynamic _np = np;
                //buf = io.BytesIO()
                dynamic buf = BytesIO.Invoke();

                //fig.savefig(buf, dpi=__dpi__, format='png')
                fig.InvokeMethod("savefig", new PyTuple(new PyObject[] { buf }), Py.kw("dpi", dpi, "format", format));
                var buf_out = _np.array(buf.getbuffer(), Py.kw("dtype", Numpy.GetNumpyDataType(typeof(byte))));
                var arr     = Numpy.ToArray(buf_out);

                return((byte[])arr);
            }
Пример #10
0
        public static void PlotInWindow()
        {
            byte[] plotdata;
            using (Py.GIL())
            {
                var scope = Py.CreateScope();
                var np    = scope.Import("numpy", "np");
                var plt   = scope.Import("matplotlib.pylab", "plt");

                var x = Numpy.NewArray(new double[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 });
                var y = np.sin(x);
                scope.Set("x", x);
                scope.Set("y", y);

                scope.Exec(
                    "fig = plt.figure() \n" +
                    "plt.plot(x[1:], y[1:]) \n"
                    );
                var fig = scope.Get("fig");
                plotdata = Matplotlib.SaveFigureToArray(fig, 200, "png");
            }

            Stream stream = new MemoryStream(plotdata);
            Thread th     = new Thread(
                () => {
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.StreamSource = stream;
                bitmapImage.EndInit();
                var img1       = new System.Windows.Controls.Image();
                img1.Source    = bitmapImage;
                Window window  = new Window();
                window.Content = img1;
                window.ShowDialog();
                mEvent.Set();
            }
                );

            th.SetApartmentState(ApartmentState.STA);
            th.Start();
            mEvent.WaitOne();
        }
Пример #11
0
        private static IEnumerable <Line> CreateCylinderStartLines(double alpha, int zLimit, int yLimit, double quarter)
        {
            var inRadian = alpha.ToRadian();
            var dz       = Tan(inRadian);
            var r        = Sqrt(Pow(CausticCylinder.R, 2) - Pow(CausticCylinder.R / quarter, 2));
            var zRange   = Numpy.LinSpace(-r, r, zLimit).ToList();
            var yRange   = Numpy.LinSpace(0, CausticCylinder.L, yLimit).ToList();

            foreach (var z in zRange)
            {
                foreach (var y in yRange)
                {
                    if (Abs(Abs(z) - Abs(r)) <= 5e-5 || Abs(y) <= 5e-5 || Abs(y - CausticCylinder.L) <= 5e-5)
                    {
                        continue;
                    }
                    yield return(Line.FromPointAndDirection((-CausticCylinder.R / quarter, y, z), (-1, 0, dz)));
                }
            }
        }
Пример #12
0
        private static IEnumerable <Line> SphereStart(double alpha, int xLimit, int yLimit)
        {
            var inRadian = alpha.ToRadian();
            var dx       = Tan(inRadian);
            var xRange   = Numpy.LinSpace(-1, 1, xLimit).ToList();
            var yRange   = Numpy.LinSpace(-1, 1, yLimit).ToList();

            foreach (var x in xRange)
            {
                foreach (var y in yRange)
                {
                    if (x * x + y * y >= 1)
                    {
                        continue;
                    }

                    yield return(Line.FromPointAndDirection((x - dx, y, 2), (dx, 0, -1)));
                }
            }
        }
Пример #13
0
        public static void Plot()
        {
            using (Py.GIL())
            {
                dynamic plt = Py.Import("matplotlib.pylab");
                dynamic np  = Py.Import("numpy");

                var x = Numpy.NewArray(new double[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 });
                var y = np.sin(x);
                //plt.plot(x);
                plt.figure();
                //plt.scatter(x, y);
                plt.show();
            }
            using (Py.GIL())
            {
                var scope = Py.CreateScope();
                var np    = scope.Import("numpy", "np");
                var plt   = scope.Import("matplotlib.pylab", "plt");

                var x = Numpy.NewArray(new double[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 });
                var y = np.sin(x);
                scope.Set("x", x);
                scope.Set("y", y);

                //directly plot
                plt.plot(x, y);
                plt.show();

                //use python slice grammer
                scope.Exec(
                    "fig = plt.figure() \n" +
                    "plt.plot(x[1:], y[1:]) \n" +
                    "plt.show()"
                    );
            }
        }
Пример #14
0
        public void TestNumpy()
        {
            using (Py.GIL())
            {
                Numpy.Initialize();
                var scope = Py.CreateScope();
                var np    = scope.Import("numpy", "np");


                dynamic m1 = np.matrix(new List <List <float> > {
                    new List <float>()
                    {
                        1, 2, 3
                    }, new List <float>()
                    {
                        4, 5, 6
                    }
                });
                TestOutput(m1);
                dynamic m2 = np.matrix(new List <List <float> > {
                    new List <float>()
                    {
                        1, 2,
                    }, new List <float>()
                    {
                        3, 4
                    }, new List <float>()
                    {
                        5, 6
                    }
                });
                TestOutput(m2);

                TestOutput((m1 * m2).ToString());
            }
        }
        // only returns the aug_object_samples and not the rbnn min vals!
        public static List<AugmentableObjectSample> AugmentableSampleResultFormat(string augmentable_format_content)
        {
            // id   position scale  shape airplane_position distance_from_transitive_floor
            // int  x,y,z    x,y,z  BIRD  x,y,z             double
            // space separated
            List<AugmentableObjectSample> samples = new List<AugmentableObjectSample>();
            string[] lines = augmentable_format_content.Split("\n");
            foreach (var line in lines)
            {
                if (line.Length < 5)
                    continue;

                string[] parts = line.Split(" ");

                int id = int.Parse(parts[0]);
                string[] pos_string = parts[1].Split(",");
                Vector3 pos = new Vector3(float.Parse(pos_string[0]), float.Parse(pos_string[1]), float.Parse(pos_string[2]));

                string[] scale_string = parts[2].Split(",");
                Vector3 scale = new Vector3(float.Parse(scale_string[0]), float.Parse(scale_string[1]), float.Parse(scale_string[2]));

                string name = parts[3];



                AugmentableObjectSample samp = new AugmentableObjectSample(name, scale, pos, Numpy.MaxDimension(scale));
                samples.Add(samp);
            }
            return samples;
        }