public Matrix Multiply(Matrix leftSide, Matrix rightSide)
        {
            int rows    = leftSide.RowsCount;
            int columns = rightSide.ColumnsCount;

            double[][] result = ArraysExtensions.GetJaggedArray(rows, columns);

            double[][] leftMatrixData            = (double[][])leftSide;
            double[][] rightMatrixData_Transpose = (double[][])Transpose(rightSide);// just for more speed

            Parallel.For(0, rows, (i) =>
            {
                var row = leftMatrixData[i]; // just for more speed
                for (int j = 0; j < columns; j++)
                {
                    var column = rightMatrixData_Transpose[j]; // just for more speed
                    double sum = 0;

                    for (int k = 0; k < row.Length; k++)
                    {
                        sum += row[k] * column[k];
                    }

                    result[i][j] = sum;
                }
            });

            return(new Matrix(result));
        }
Пример #2
0
        public Matrix Multiply(Matrix leftSide, Matrix rightSide)
        {
            int rows    = leftSide.RowsCount;
            int columns = rightSide.ColumnsCount;

            double[][] result = ArraysExtensions.GetJaggedArray(rows, columns);

            var leftMatrixData = (double[][])leftSide;

            var rightMatrixData_Transpose = (double[][])Transpose(rightSide); // just for more speed.

            for (int i = 0; i < rows; i++)
            {
                //var row = leftMatrixData[i]; // just for more speed. pointer
                for (int j = 0; j < columns; j++)
                {
                    //var column = rightSide_Transpose[j]; // just for more speed. pointer
                    double sum = 0;
                    for (int k = 0; k < leftSide.ColumnsCount; k++)
                    {
                        sum += leftMatrixData[i][k] * rightMatrixData_Transpose[j][k];
                    }

                    result[i][j] = sum;
                }
            }
            return(new Matrix(result));
        }
        public Matrix Substract(Matrix leftSide, Matrix rightSide)
        {
            var result = ArraysExtensions.GetJaggedArray(leftSide.RowsCount, leftSide.ColumnsCount);

            Parallel.For(0, leftSide.RowsCount, i =>
            {
                for (int j = 0; j < leftSide.ColumnsCount; j++)
                {
                    result[i][j] = leftSide[i, j] - rightSide[i, j];
                }
            });

            return(new Matrix(result));
        }
        public Matrix Transpose(Matrix matrix)
        {
            double[][] result = ArraysExtensions.GetJaggedArray(matrix.ColumnsCount, matrix.RowsCount);

            Parallel.For(0, matrix.RowsCount, (i) =>
            {
                for (int j = 0; j < matrix.ColumnsCount; j++)
                {
                    result[j][i] = matrix[i, j];
                }
            });

            return(new Matrix(result));
        }
        public Matrix Add(Matrix matrix, double number)
        {
            var resultData = ArraysExtensions.GetJaggedArray(matrix.RowsCount, matrix.ColumnsCount);

            Parallel.For(0, matrix.RowsCount, i =>
            {
                for (int j = 0; j < matrix.ColumnsCount; j++)
                {
                    resultData[i][j] = matrix[i, j] + number;
                }
            });

            return(new Matrix(resultData));
        }
Пример #6
0
        public Matrix Transpose(Matrix matrix)
        {
            double[][] result = ArraysExtensions.GetJaggedArray(matrix.ColumnsCount, matrix.RowsCount);

            for (int i = 0; i < matrix.RowsCount; i++)
            {
                for (int j = 0; j < matrix.ColumnsCount; j++)
                {
                    result[j][i] = matrix[i, j];
                }
            }

            return(new Matrix(result));
        }
Пример #7
0
        public Matrix Multiply(Matrix matrix, double number)
        {
            double[][] result = ArraysExtensions.GetJaggedArray(matrix.RowsCount, matrix.ColumnsCount);

            for (int i = 0; i < matrix.RowsCount; i++)
            {
                for (int j = 0; j < matrix.ColumnsCount; j++)
                {
                    result[i][j] = matrix[i, j] * number;
                }
            }

            return(new Matrix(result));
        }
Пример #8
0
        public Matrix Substract(Matrix leftSide, Matrix rightSide)
        {
            var resultData = ArraysExtensions.GetJaggedArray(leftSide.RowsCount, leftSide.ColumnsCount);

            for (int i = 0; i < leftSide.RowsCount; i++)
            {
                for (int j = 0; j < leftSide.ColumnsCount; j++)
                {
                    resultData[i][j] = leftSide[i, j] - rightSide[i, j];
                }
            }

            return(new Matrix(resultData));
        }
        public Matrix Add(Matrix leftSide, Matrix rightSide)
        {
            var resultData = ArraysExtensions.GetJaggedArray(leftSide.RowsCount, leftSide.ColumnsCount);

            Parallel.For(0, leftSide.RowsCount, i =>
            {
                // also can be pointer
                for (int j = 0; j < leftSide.ColumnsCount; j++)
                {
                    resultData[i][j] = leftSide[i, j] + rightSide[i, j];
                }
            });

            return(new Matrix(resultData));
        }
        public Matrix Multiply(Matrix leftSide, double number)
        {
            double[][] result = ArraysExtensions.GetJaggedArray(leftSide.RowsCount, leftSide.ColumnsCount);

            var leftData = (double[][])leftSide;

            Parallel.For(0, leftSide.RowsCount, (i) =>
            {
                var row = leftData[i];
                for (int j = 0; j < leftSide.ColumnsCount; j++)
                {
                    result[i][j] = row[j] * number;
                }
            });

            return(new Matrix(result));
        }