Esempio n. 1
0
        public static double DotProduct(this Matrix a, Matrix b)
        {
            if (!a.IsVector || !b.IsVector)
            {
                throw new ArgumentException("two vectors expected");
            }

            //var length = a.Data.GetLength(0);
            //if ((length != a.Data.GetLength(1) && a.Data.GetLength(1) != 1) || (b.Data.GetLength(0) != a.Data.GetLength(1) && a.Data.GetLength(0) != 1))
            //	throw new ArgumentException();

            //if (length != b.Data.GetLength(1))
            //	throw new ArgumentException("vectors don't have same length");

            //var result = 0.0;
            //for (var i = 0; i < length; i++)
            //	result += a.Data[i, 0] * b.Data[0, i];
            //return result;

            var aArray = a.ToPackedArray();
            var bArray = b.ToPackedArray();

            if (aArray.Length != bArray.Length)
            {
                throw new ArgumentException("vectors don't have same length");
            }

            var result = 0.0;

            for (var i = 0; i < aArray.Length; i++)
            {
                result += aArray[i] * bArray[i];
            }
            return(result);
        }
Esempio n. 2
0
        public static double VectorLength(this Matrix input)
        {
            if (!input.IsVector)
            {
                throw new ArgumentException("input is not a vector");
            }

            var v = input.ToPackedArray();

            return(Math.Sqrt(v.Sum(t => Math.Pow(t, 2))));
        }
Esempio n. 3
0
        public static double DotProduct(this Matrix a, Matrix b)
        {
            if (!a.IsVector || !b.IsVector)
                throw new ArgumentException("two vectors expected");

            //var length = a.Data.GetLength(0);
            //if ((length != a.Data.GetLength(1) && a.Data.GetLength(1) != 1) || (b.Data.GetLength(0) != a.Data.GetLength(1) && a.Data.GetLength(0) != 1))
            //	throw new ArgumentException();
    
            //if (length != b.Data.GetLength(1))
            //	throw new ArgumentException("vectors don't have same length");

            //var result = 0.0;
            //for (var i = 0; i < length; i++)
            //	result += a.Data[i, 0] * b.Data[0, i];
            //return result;

            var aArray = a.ToPackedArray();
            var bArray = b.ToPackedArray();

            if (aArray.Length != bArray.Length)
                throw new ArgumentException("vectors don't have same length");

            var result = 0.0;
            for (var i = 0; i < aArray.Length; i++)
                result += aArray[i] * bArray[i];
            return result;
        }