示例#1
0
 public static MFullArray <TScalar> horzcat <[AnyPrimitive] TScalar>(
     MFullArray <TScalar> array1, MFullArray <TScalar> array2, MFullArray <TScalar> array3,
     MFullArray <TScalar> array4, MFullArray <TScalar> array5, MFullArray <TScalar> array6,
     MFullArray <TScalar> array7, MFullArray <TScalar> array8, MFullArray <TScalar> array9,
     MFullArray <TScalar> array10, MFullArray <TScalar> array11, MFullArray <TScalar> array12,
     MFullArray <TScalar> array13, MFullArray <TScalar> array14, MFullArray <TScalar> array15,
     MFullArray <TScalar> array16, MFullArray <TScalar> array17, MFullArray <TScalar> array18,
     MFullArray <TScalar> array19, MFullArray <TScalar> array20, MFullArray <TScalar> array21,
     MFullArray <TScalar> array22, MFullArray <TScalar> array23, MFullArray <TScalar> array24,
     MFullArray <TScalar> array25, MFullArray <TScalar> array26, MFullArray <TScalar> array27,
     MFullArray <TScalar> array28, MFullArray <TScalar> array29, MFullArray <TScalar> array30,
     MFullArray <TScalar> array31, MFullArray <TScalar> array32, MFullArray <TScalar> array33,
     MFullArray <TScalar> array34, MFullArray <TScalar> array35, MFullArray <TScalar> array36,
     MFullArray <TScalar> array37, MFullArray <TScalar> array38, MFullArray <TScalar> array39,
     MFullArray <TScalar> array40, MFullArray <TScalar> array41, MFullArray <TScalar> array42,
     MFullArray <TScalar> array43, MFullArray <TScalar> array44, MFullArray <TScalar> array45,
     MFullArray <TScalar> array46, MFullArray <TScalar> array47, MFullArray <TScalar> array48,
     MFullArray <TScalar> array49, MFullArray <TScalar> array50, MFullArray <TScalar> array51,
     MFullArray <TScalar> array52, MFullArray <TScalar> array53, MFullArray <TScalar> array54,
     MFullArray <TScalar> array55, MFullArray <TScalar> array56)
 {
     return(horzcat(new[]
     {
         array1, array2, array3, array4, array5, array6, array7, array8, array9, array10,
         array11, array12, array13, array14, array15, array16, array17, array18, array19, array20,
         array21, array22, array23, array24, array25, array26, array27, array28, array29, array30,
         array31, array32, array33, array34, array35, array36, array37, array38, array39, array40,
         array41, array42, array43, array44, array45, array46, array47, array48, array49, array50,
         array51, array52, array53, array54, array55, array56
     }));
 }
示例#2
0
        public static MFullArray <double> max(MFullArray <double> array)
        {
            Contract.Requires(array != null);

            var shape = array.Shape;
            int dimensionIndex = shape.IndexOfFirstNonSingletonDimension();
            int sliceStep, sliceSize;

            shape.GetDimensionStepAndSize(dimensionIndex, out sliceStep, out sliceSize);

            var result      = new MFullArray <double>(MArrayShape.CollapseDimension(shape, dimensionIndex));
            var resultArray = result.BackingArray;

            for (int sliceIndex = 0; sliceIndex < resultArray.Length; ++sliceIndex)
            {
                double maximum = double.NegativeInfinity;
                for (int sliceElementIndex = 0; sliceElementIndex < sliceSize; ++sliceElementIndex)
                {
                    double value = array[sliceIndex * sliceSize + sliceElementIndex * sliceStep];
                    if (value > maximum)
                    {
                        maximum = value;
                    }
                }

                resultArray[sliceIndex] = maximum;
            }

            return(result);
        }
示例#3
0
        public static MFullArray <double> mean(MFullArray <double> array)
        {
            Contract.Requires(array != null);

            var shape = array.Shape;
            int dimensionIndex = shape.IndexOfFirstNonSingletonDimension();
            int sliceStep, sliceSize;

            shape.GetDimensionStepAndSize(dimensionIndex, out sliceStep, out sliceSize);

            var result      = new MFullArray <double>(MArrayShape.CollapseDimension(shape, dimensionIndex));
            var resultArray = result.BackingArray;

            for (int sliceIndex = 0; sliceIndex < resultArray.Length; ++sliceIndex)
            {
                double sum = 0;
                for (int sliceElementIndex = 0; sliceElementIndex < sliceSize; ++sliceElementIndex)
                {
                    sum += array[sliceIndex * sliceSize + sliceElementIndex * sliceStep];
                }

                resultArray[sliceIndex] = sum / sliceSize;
            }

            return(result);
        }
示例#4
0
        public static MFullArray <double> rdivide(MFullArray <double> lhs, MFullArray <double> rhs)
        {
            Contract.Requires(lhs != null);
            Contract.Requires(rhs != null);

            if (lhs.IsScalar)
            {
                return(rdivide(lhs[0], rhs));
            }
            if (rhs.IsScalar)
            {
                return(rdivide(lhs, rhs[0]));
            }
            if (lhs.Shape != rhs.Shape)
            {
                throw new MArrayShapeException();
            }

            var result = new MFullArray <double>(lhs.Shape);

            for (int i = 0; i < lhs.Count; ++i)
            {
                result[i] = lhs[i] / rhs[i];
            }
            return(result);
        }
示例#5
0
        public static MFullArray <double> minus(MFullArray <double> lhs, MFullArray <double> rhs)
        {
            Contract.Requires(lhs != null);
            Contract.Requires(rhs != null);

            if (lhs.IsScalar)
            {
                return(minus(lhs[0], rhs));
            }
            if (rhs.IsScalar)
            {
                return(minus(lhs, rhs[0]));
            }
            if (lhs.Shape != rhs.Shape)
            {
                throw new MArrayShapeException();
            }

            var c = new MFullArray <double>(lhs.Shape);

            for (int i = 0; i < lhs.Count; ++i)
            {
                c[i] = lhs[i] - rhs[i];
            }
            return(c);
        }
示例#6
0
        private static MFullArray <TScalar> vertcat <[AnyPrimitive] TScalar>(params MFullArray <TScalar>[] arrays)
        {
            Contract.Requires(arrays != null);
            Contract.Requires(arrays.Length > 0);

            int columnCount   = arrays[0].ColumnCount;
            int totalRowCount = 0;

            foreach (var array in arrays)
            {
                if (array.IsHigherDimensional)
                {
                    throw new NotImplementedException("vertcat on higher-dimensional arrays.");
                }
                totalRowCount += array.RowCount;
            }

            var result       = new MFullArray <TScalar>(totalRowCount, columnCount);
            int baseRowIndex = 0;

            foreach (var array in arrays)
            {
                int arrayRowCount = array.RowCount;
                for (int i = 0; i < arrayRowCount; ++i)
                {
                    for (int j = 0; j < columnCount; ++j)
                    {
                        result[j * totalRowCount + baseRowIndex + i] = array[j * arrayRowCount + i];
                    }
                }
                baseRowIndex += arrayRowCount;
            }

            return(result);
        }
示例#7
0
        public static MFullArray <TScalar> horzcat <[AnyPrimitive] TScalar>(MFullArray <TScalar> left, MFullArray <TScalar> right)
        {
            Contract.Requires(left != null);
            Contract.Requires(right != null);

            if (left.IsHigherDimensional || right.IsHigherDimensional)
            {
                throw new NotImplementedException("horzcat on higher-dimensional arrays.");
            }

            if (left.RowCount != right.RowCount)
            {
                throw new MArrayShapeException();
            }

            int rowCount    = left.RowCount;
            var resultShape = new MArrayShape(rowCount, left.ColumnCount + right.ColumnCount);
            var result      = new MFullArray <TScalar>(resultShape);

            for (int rowIndex = 0; rowIndex < rowCount; ++rowIndex)
            {
                for (int leftColumnIndex = 0; leftColumnIndex < left.ColumnCount; ++leftColumnIndex)
                {
                    result[leftColumnIndex * rowCount + rowIndex] = left[leftColumnIndex * rowCount + rowIndex];
                }
                for (int rightColumnIndex = 0; rightColumnIndex < right.ColumnCount; ++rightColumnIndex)
                {
                    result[(left.ColumnCount + rightColumnIndex) * rowCount + rowIndex] = right[rightColumnIndex * rowCount + rowIndex];
                }
            }

            return(result);
        }
示例#8
0
        public static MFullArray <bool> all(MFullArray <bool> array)
        {
            Contract.Requires(array != null);

            if (array.IsEmpty)
            {
                return(true);
            }

            var shape = array.Shape;
            int dimensionIndex = shape.IndexOfFirstNonSingletonDimension();
            int sliceStep, sliceSize;

            shape.GetDimensionStepAndSize(dimensionIndex, out sliceStep, out sliceSize);

            var result      = new MFullArray <bool>(MArrayShape.CollapseDimension(shape, dimensionIndex));
            var resultArray = result.BackingArray;

            for (int sliceIndex = 0; sliceIndex < resultArray.Length; ++sliceIndex)
            {
                bool value = true;
                for (int sliceElementIndex = 0; sliceElementIndex < sliceSize; ++sliceElementIndex)
                {
                    value &= array[sliceIndex * sliceSize + sliceElementIndex * sliceStep];
                }
                resultArray[sliceIndex] = value;
            }

            return(result);
        }
示例#9
0
        public static MFullArray <double> ldivide(MFullArray <double> lhs, MFullArray <double> rhs)
        {
            Contract.Requires(lhs != null);
            Contract.Requires(rhs != null);

            return(rdivide(rhs, lhs));
        }
示例#10
0
        public static MFullArray <double> clock()
        {
            var now = DateTime.Now;

            return(MFullArray <double> .CreateRowVector(
                       now.Year, now.Month, now.Day,
                       now.Hour, now.Minute, now.Second + now.Millisecond / 1000.0));
        }
示例#11
0
        public static MFullArray <double> rem(MFullArray <double> lhs, MFullArray <double> rhs)
        {
            Contract.Requires(lhs != null);
            Contract.Requires(rhs != null);

            MatchShapes(ref lhs, ref rhs);
            return(MFunctional.Map(lhs, rhs, rem));
        }
示例#12
0
 public static MFullArray <bool> any(MFullArray <double> array)
 {
     Contract.Requires(array != null);
     if (array.IsEmpty)
     {
         return(false);
     }
     return(MFunctional.CollapseDimension(array, d => d != 0, (b1, b2) => b1 | b2));
 }
示例#13
0
 public static MFullArray <TScalar> horzcat <[AnyPrimitive] TScalar>(
     MFullArray <TScalar> array1, MFullArray <TScalar> array2, MFullArray <TScalar> array3,
     MFullArray <TScalar> array4, MFullArray <TScalar> array5, MFullArray <TScalar> array6,
     MFullArray <TScalar> array7, MFullArray <TScalar> array8, MFullArray <TScalar> array9,
     MFullArray <TScalar> array10, MFullArray <TScalar> array11, MFullArray <TScalar> array12,
     MFullArray <TScalar> array13, MFullArray <TScalar> array14)
 {
     return(horzcat(new[] { array1, array2, array3, array4, array5, array6, array7, array8, array9, array10, array11, array12, array13, array14 }));
 }
示例#14
0
        public static MFullArray <bool> not(MFullArray <bool> array)
        {
            Contract.Requires(array != null);

            if (array.IsScalar)
            {
                return(not(array[0]));
            }
            return(MFunctional.Map(array, not));
        }
示例#15
0
        public static MFullArray <double> hypot(MFullArray <double> x, MFullArray <double> y)
        {
            ElementaryOperations.MatchShapes(ref x, ref y);
            var result = new MFullArray <double>(x.Shape);

            for (int i = 0; i < result.Count; ++i)
            {
                result[i] = Math.Sqrt(x[i] * x[i] + y[i] * y[i]);
            }
            return(result);
        }
示例#16
0
        public static MFullArray <double> power(double @base, MFullArray <double> exponent)
        {
            Contract.Requires(exponent != null);

            var result = new MFullArray <double>(exponent.Shape);

            for (int i = 0; i < exponent.Count; ++i)
            {
                result[i] = power(@base, exponent[i]);
            }
            return(result);
        }
示例#17
0
        public static MFullArray <bool> le(MFullArray <double> a, MFullArray <double> b)
        {
            ElementaryOperations.MatchShapes(ref a, ref b);

            var result = new MFullArray <bool>(a.Shape);

            for (int i = 0; i < result.Count; ++i)
            {
                result[i] = a[i] <= b[i];
            }
            return(result);
        }
示例#18
0
        public static MFullArray <double> minus(double lhs, MFullArray <double> rhs)
        {
            Contract.Requires(rhs != null);

            var c = new MFullArray <double>(rhs.Shape);

            for (int i = 0; i < rhs.Count; ++i)
            {
                c[i] = lhs - rhs[i];
            }
            return(c);
        }
示例#19
0
        public static MFullArray <double> rdivide(double lhs, MFullArray <double> rhs)
        {
            Contract.Requires(rhs != null);

            var result = new MFullArray <double>(rhs.Shape);

            for (int i = 0; i < rhs.Count; ++i)
            {
                result[i] = lhs / rhs[i];
            }
            return(result);
        }
示例#20
0
        public static MFullArray <double> fix(MFullArray <double> array)
        {
            Contract.Requires(array != null);

            var result = new MFullArray <double>(array.Shape);

            for (int i = 0; i < result.Count; ++i)
            {
                result[i] = fix(array[i]);
            }
            return(result);
        }
示例#21
0
        public static MFullArray <double> power(MFullArray <double> @base, double exponent)
        {
            Contract.Requires(@base != null);

            var result = new MFullArray <double>(@base.Shape);

            for (int i = 0; i < @base.Count; ++i)
            {
                result[i] = power(@base[i], exponent);
            }
            return(result);
        }
示例#22
0
        public static MFullArray <double> plus(MFullArray <double> lhs, double rhs)
        {
            Contract.Requires(lhs != null);

            var c = new MFullArray <double>(lhs.Shape);

            for (int i = 0; i < lhs.Count; ++i)
            {
                c[i] = lhs[i] + rhs;
            }
            return(c);
        }
示例#23
0
        public static MFullArray <bool> isnan(MFullArray <double> array)
        {
            Contract.Requires(array != null);

            var result = new MFullArray <bool>(array.Shape);

            for (int i = 0; i < array.Count; ++i)
            {
                result[i] = double.IsNaN(array[i]);
            }
            return(result);
        }
示例#24
0
        public static MFullArray <TReal> imag <[AnyReal] TReal>(MFullArray <MComplex <TReal> > array) where TReal : struct
        {
            Contract.Requires(array != null);

            var result = new MFullArray <TReal>(array.Shape);

            for (int i = 0; i < array.Count; ++i)
            {
                result[i] = array[i].ImaginaryPart;
            }
            return(result);
        }
示例#25
0
        internal static DateTime RowToDateTime(MFullArray <double> array, int rowIndex)
        {
            int    rowCount = array.Shape.RowCount;
            double seconds  = array[rowCount * 5 + rowIndex];

            return(new DateTime(
                       PseudoBuiltins.ToInt(array[rowCount * 0 + rowIndex]),
                       PseudoBuiltins.ToInt(array[rowCount * 1 + rowIndex]),
                       PseudoBuiltins.ToInt(array[rowCount * 2 + rowIndex]),
                       PseudoBuiltins.ToInt(array[rowCount * 3 + rowIndex]),
                       PseudoBuiltins.ToInt(array[rowCount * 4 + rowIndex]),
                       (int)seconds, (int)((seconds % 1) * 1000)));
        }
示例#26
0
        public static MFullArray <double> size(MValue value)
        {
            Contract.Requires(value != null);

            var shape  = value.Shape;
            var result = new MFullArray <double>(MArrayShape.RowVector(shape.DimensionCount));

            for (int i = 0; i < shape.DimensionCount; ++i)
            {
                result[i] = shape.GetDimensionSize(i);
            }
            return(result);
        }
示例#27
0
        public static MFullArray <double> times(MFullArray <double> lhs, double rhs)
        {
            Contract.Requires(lhs != null);

            var result      = new MFullArray <double>(lhs.Shape);
            var lhsArray    = lhs.BackingArray;
            var resultArray = result.BackingArray;
            int count       = lhs.Count;

            for (int i = 0; i < count; ++i)
            {
                resultArray[i] = lhsArray[i] * rhs;
            }
            return(result);
        }
示例#28
0
        public static MFullArray <double> mpower(MFullArray <double> @base, double exponent)
        {
            Contract.Requires(@base != null);

            if ([email protected])
            {
                throw new MArrayShapeException();
            }
            if (@base.IsScalar)
            {
                return(mpower(@base[0], exponent));
            }

            throw new NotImplementedException("Non-scalar mpower.");
        }
示例#29
0
        public static double norm(MFullArray <double> array)
        {
            Contract.Requires(array != null);

            if (array.IsVector)
            {
                double norm = 0;
                for (int i = 0; i < array.Count; ++i)
                {
                    norm += array[i] * array[i];
                }
                return(ExponentsAndLogarithms.sqrt(norm));
            }

            throw new NotImplementedException("Matrix 2-norm.");
        }
示例#30
0
        public static MFullArray <double> randi(double imax, double rowCount, double columnCount)
        {
            var exclusiveMax = PseudoBuiltins.ToInt(imax + 1);
            var result       = MFullArray <double> .CreateWithShape(rowCount, columnCount);

            int count = result.Count;

            lock (threadSharedRandom)
            {
                for (int i = 0; i < count; ++i)
                {
                    result.BackingArray[i] = threadSharedRandom.Next(0, exclusiveMax);
                }
            }
            return(result);
        }