Browse Source

LA: sparse matrix OfArray

pull/112/head
Christoph Ruegg 13 years ago
parent
commit
bd131a91e0
  1. 10
      src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs
  2. 10
      src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs
  3. 10
      src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs
  4. 10
      src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs
  5. 12
      src/Numerics/LinearAlgebra/Double/DenseMatrix.cs
  6. 10
      src/Numerics/LinearAlgebra/Double/SparseMatrix.cs
  7. 10
      src/Numerics/LinearAlgebra/Single/DenseMatrix.cs
  8. 10
      src/Numerics/LinearAlgebra/Single/SparseMatrix.cs
  9. 13
      src/Numerics/LinearAlgebra/Storage/DenseColumnMajorMatrixStorage.cs
  10. 31
      src/Numerics/LinearAlgebra/Storage/SparseCompressedRowMatrixStorage.cs

10
src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs

@ -131,15 +131,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
/// </summary>
public static DenseMatrix OfArray(Complex[,] array)
{
var storage = new DenseColumnMajorMatrixStorage<Complex>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.Data[(j * storage.RowCount) + i] = array[i, j];
}
}
return new DenseMatrix(storage);
return new DenseMatrix(DenseColumnMajorMatrixStorage<Complex>.OfArray(array));
}
/// <summary>

10
src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs

@ -109,15 +109,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
/// </summary>
public static SparseMatrix OfArray(Complex[,] array)
{
var storage = new SparseCompressedRowMatrixStorage<Complex>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.At(i, j, array[i, j]);
}
}
return new SparseMatrix(storage);
return new SparseMatrix(SparseCompressedRowMatrixStorage<Complex>.OfArray(array));
}
/// <summary>

10
src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs

@ -131,15 +131,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
/// </summary>
public static DenseMatrix OfArray(Complex32[,] array)
{
var storage = new DenseColumnMajorMatrixStorage<Complex32>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.Data[(j * storage.RowCount) + i] = array[i, j];
}
}
return new DenseMatrix(storage);
return new DenseMatrix(DenseColumnMajorMatrixStorage<Complex32>.OfArray(array));
}
/// <summary>

10
src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs

@ -109,15 +109,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
/// </summary>
public static SparseMatrix OfArray(Complex32[,] array)
{
var storage = new SparseCompressedRowMatrixStorage<Complex32>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.At(i, j, array[i, j]);
}
}
return new SparseMatrix(storage);
return new SparseMatrix(SparseCompressedRowMatrixStorage<Complex32>.OfArray(array));
}
/// <summary>

12
src/Numerics/LinearAlgebra/Double/DenseMatrix.cs

@ -28,6 +28,8 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System.Runtime;
namespace MathNet.Numerics.LinearAlgebra.Double
{
using Algorithms.LinearAlgebra;
@ -131,15 +133,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// </summary>
public static DenseMatrix OfArray(double[,] array)
{
var storage = new DenseColumnMajorMatrixStorage<double>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.Data[(j * storage.RowCount) + i] = array[i, j];
}
}
return new DenseMatrix(storage);
return new DenseMatrix(DenseColumnMajorMatrixStorage<double>.OfArray(array));
}
/// <summary>

10
src/Numerics/LinearAlgebra/Double/SparseMatrix.cs

@ -108,15 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// </summary>
public static SparseMatrix OfArray(double[,] array)
{
var storage = new SparseCompressedRowMatrixStorage<double>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.At(i, j, array[i, j]);
}
}
return new SparseMatrix(storage);
return new SparseMatrix(SparseCompressedRowMatrixStorage<double>.OfArray(array));
}
/// <summary>

10
src/Numerics/LinearAlgebra/Single/DenseMatrix.cs

@ -131,15 +131,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single
/// </summary>
public static DenseMatrix OfArray(float[,] array)
{
var storage = new DenseColumnMajorMatrixStorage<float>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.Data[(j * storage.RowCount) + i] = array[i, j];
}
}
return new DenseMatrix(storage);
return new DenseMatrix(DenseColumnMajorMatrixStorage<float>.OfArray(array));
}
/// <summary>

10
src/Numerics/LinearAlgebra/Single/SparseMatrix.cs

@ -108,15 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single
/// </summary>
public static SparseMatrix OfArray(float[,] array)
{
var storage = new SparseCompressedRowMatrixStorage<float>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.At(i, j, array[i, j]);
}
}
return new SparseMatrix(storage);
return new SparseMatrix(SparseCompressedRowMatrixStorage<float>.OfArray(array));
}
/// <summary>

13
src/Numerics/LinearAlgebra/Storage/DenseColumnMajorMatrixStorage.cs

@ -108,6 +108,19 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
return storage;
}
public static DenseColumnMajorMatrixStorage<T> OfArray(T[,] array)
{
var storage = new DenseColumnMajorMatrixStorage<T>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
storage.Data[(j * storage.RowCount) + i] = array[i, j];
}
}
return storage;
}
public static DenseColumnMajorMatrixStorage<T> OfColumnMajorEnumerable(int rows, int columns, IEnumerable<T> data)
{
if (data == null)

31
src/Numerics/LinearAlgebra/Storage/SparseCompressedRowMatrixStorage.cs

@ -370,6 +370,37 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
return storage;
}
public static SparseCompressedRowMatrixStorage<T> OfArray(T[,] array)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
var storage = new SparseCompressedRowMatrixStorage<T>(array.GetLength(0), array.GetLength(1));
var rowPointers = storage.RowPointers;
var columnIndices = new List<int>();
var values = new List<T>();
for (int row = 0; row < storage.RowCount; row++)
{
rowPointers[row] = values.Count;
for (int col = 0; col < storage.ColumnCount; col++)
{
if (!Zero.Equals(array[row,col]))
{
values.Add(array[row, col]);
columnIndices.Add(col);
}
}
}
storage.ColumnIndices = columnIndices.ToArray();
storage.Values = values.ToArray();
storage.ValueCount = values.Count;
return storage;
}
public static SparseCompressedRowMatrixStorage<T> OfRowMajorEnumerable(int rows, int columns, IEnumerable<T> data)
{
if (data == null)

Loading…
Cancel
Save