diff --git a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex.cs b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex.cs index f9107c06..997f4db2 100644 --- a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex.cs +++ b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex.cs @@ -2906,5 +2906,56 @@ namespace MathNet.Numerics.Providers.LinearAlgebra matrixD[i*order + i] = vectorEv[i]; } } + + /// + /// Assumes that and have already been transposed. + /// + protected static void GetRow(Transpose transpose, int rowindx, int numRows, int numCols, Complex[] matrix, Complex[] row) + { + if (transpose == Transpose.DontTranspose) + { + for (int i = 0; i < numCols; i++) + { + row[i] = matrix[(i * numRows) + rowindx]; + } + } + else if (transpose == Transpose.ConjugateTranspose) + { + int offset = rowindx * numCols; + for (int i = 0; i < row.Length; i++) + { + row[i] = matrix[i + offset].Conjugate(); + } + } + else + { + Array.Copy(matrix, rowindx * numCols, row, 0, numCols); + } + } + + /// + /// Assumes that and have already been transposed. + /// + protected static void GetColumn(Transpose transpose, int colindx, int numRows, int numCols, Complex[] matrix, Complex[] column) + { + if (transpose == Transpose.DontTranspose) + { + Array.Copy(matrix, colindx * numRows, column, 0, numRows); + } + else if (transpose == Transpose.ConjugateTranspose) + { + for (int i = 0; i < numRows; i++) + { + column[i] = matrix[(i * numCols) + colindx].Conjugate(); + } + } + else + { + for (int i = 0; i < numRows; i++) + { + column[i] = matrix[(i * numCols) + colindx]; + } + } + } } } diff --git a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex32.cs b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex32.cs index aebc2fa8..7cb64870 100644 --- a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex32.cs +++ b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex32.cs @@ -2903,5 +2903,56 @@ namespace MathNet.Numerics.Providers.LinearAlgebra } } } + + /// + /// Assumes that and have already been transposed. + /// + protected static void GetRow(Transpose transpose, int rowindx, int numRows, int numCols, Complex32[] matrix, Complex32[] row) + { + if (transpose == Transpose.DontTranspose) + { + for (int i = 0; i < numCols; i++) + { + row[i] = matrix[(i*numRows) + rowindx]; + } + } + else if (transpose == Transpose.ConjugateTranspose) + { + int offset = rowindx*numCols; + for (int i = 0; i < row.Length; i++) + { + row[i] = matrix[i + offset].Conjugate(); + } + } + else + { + Array.Copy(matrix, rowindx*numCols, row, 0, numCols); + } + } + + /// + /// Assumes that and have already been transposed. + /// + protected static void GetColumn(Transpose transpose, int colindx, int numRows, int numCols, Complex32[] matrix, Complex32[] column) + { + if (transpose == Transpose.DontTranspose) + { + Array.Copy(matrix, colindx*numRows, column, 0, numRows); + } + else if (transpose == Transpose.ConjugateTranspose) + { + for (int i = 0; i < numRows; i++) + { + column[i] = matrix[(i*numCols) + colindx].Conjugate(); + } + } + else + { + for (int i = 0; i < numRows; i++) + { + column[i] = matrix[(i*numCols) + colindx]; + } + } + } } } diff --git a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.cs b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.cs index 9ee47a8a..1700755d 100644 --- a/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.cs +++ b/src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.cs @@ -75,7 +75,6 @@ namespace MathNet.Numerics.Providers.LinearAlgebra return "Managed"; } - /// /// Assumes that and have already been transposed. ///