Example #1
0
 public static Symbolic ReduceMean(Vector vector)
 {
     if (vector.Rank == 0)
     {
         throw new RankException("can't get mean of vector with rank of 0");
     }
     else
     {
         Symbolic sum = new Symbolic(vector._values[0].Value, vector._values[0].Grads);
         for (int i = 1; i < vector.Rank; i++)
         {
             sum += vector._values[i];
         }
         sum /= vector.Rank;
         return(new Symbolic(
                    (Context context) =>
         {
             return sum.Value(context);
         },
                    (Context context) =>
         {
             return sum.Grads(context);
         }
                    ));
     }
 }
Example #2
0
 public static SymbolicVector All(Func <Diffable, Symbolic> func, Vector arg1)
 {
     Symbolic[] output = new Symbolic[arg1.Rank];
     for (int i = 0; i < arg1.Rank; i++)
     {
         output[i] = func(arg1._values[i]);
     }
     return(new SymbolicVector(output));
 }
Example #3
0
        public static SymbolicVector operator -(Vector vector)
        {
            var output = new Symbolic[vector.Rank];

            for (int i = 0; i < vector.Rank; i++)
            {
                output[i] = -vector._values[i];
            }

            return(new SymbolicVector(output));
        }
Example #4
0
        private static SymbolicVector Add(Vector vector, Diffable scalar)
        {
            Symbolic[] output = new Symbolic[vector.Rank];

            for (int i = 0; i < vector.Rank; i++)
            {
                output[i] = vector._values[i] + scalar;
            }

            return(new SymbolicVector(output));
        }
Example #5
0
 public static SymbolicVector All(Func <Diffable, Diffable, Symbolic> func, Vector arg1, Vector arg2)
 {
     if (arg1.Rank != arg2.Rank)
     {
         throw new RankException("arg1 and arg2's ranks do not match");
     }
     Symbolic[] output = new Symbolic[arg1.Rank];
     for (int i = 0; i < arg1.Rank; i++)
     {
         output[i] = func(arg1._values[i], arg2._values[i]);
     }
     return(new SymbolicVector(output));
 }