Beispiel #1
0
        /// <summary>
        ///     Multiplies matrix by IntegerBitsetMatrix
        /// </summary>
        public void MultiplyByMatrix(IntegerBitsetMatrix multiplierMatrix)
        {
            if (multiplierMatrix == null)
            {
                throw new ArgumentNullException(nameof(multiplierMatrix));
            }

            var aRows = _rows;
            var aCols = _columns;
            var bRows = multiplierMatrix.GetRows();
            var bCols = multiplierMatrix.GetColumns();

            if (aCols != bRows)
            {
                throw new OperationCanceledException("Non-conformable matrices in MultiplyByMatrix");
            }
            var result = new IntegerBitsetMatrix(aRows, bCols);

            for (var i = 0; i < aCols; ++i)     // each row of A
            {
                for (var j = 0; j < bRows; ++j) // each col of B
                {
                    for (var k = 0; k < aRows; ++k)
                    {
                        //Bit by Bit Multiplying
                        result.Matrix[i][j] = new IntegerBitset(
                            IntegerBitsetUtils.BitArrayAdder(
                                Matrix[i][j].GetBitArray(),
                                IntegerBitsetUtils.BitArrayTruncate(
                                    IntegerBitsetUtils.BitArrayMultiply(
                                        Matrix[i][k].GetBitArray(),
                                        multiplierMatrix.Matrix[k][j].GetBitArray(),
                                        new BitArray(1, false), out _), 32),
                                new BitArray(1, false), out _));
                    }
                }
            }

            Matrix   = result.Matrix;
            _columns = result.GetColumns();
            _rows    = result.GetRows();
        }
Beispiel #2
0
        /// <summary>
        ///     Adds IntegerBitsetMatrix to this
        /// </summary>
        public void AddMatrix(IntegerBitsetMatrix additionMatrix)
        {
            if (additionMatrix == null)
            {
                throw new ArgumentNullException(nameof(additionMatrix));
            }
            if (_rows != additionMatrix.GetRows() || _columns != additionMatrix.GetColumns())
            {
                throw new OperationCanceledException("Sizes of matrix are different");
            }

            for (var i = 0; i < _columns; i++)
            {
                for (var j = 0; j < _rows; j++)
                {
                    Matrix[i][j] = new IntegerBitset(IntegerBitsetUtils.BitArrayAdder(Matrix[i][j].GetBitArray(),
                                                                                      additionMatrix.Matrix[i][j].GetBitArray(), new BitArray(1, false), out _));
                }
            }
        }