Browse Source

LA: Functional vector init

pull/112/head
Christoph Ruegg 14 years ago
parent
commit
73599b146b
  1. 18
      src/Numerics/LinearAlgebra/Complex/DenseVector.cs
  2. 8
      src/Numerics/LinearAlgebra/Complex/SparseVector.cs
  3. 18
      src/Numerics/LinearAlgebra/Complex32/DenseVector.cs
  4. 8
      src/Numerics/LinearAlgebra/Complex32/SparseVector.cs
  5. 18
      src/Numerics/LinearAlgebra/Double/DenseVector.cs
  6. 8
      src/Numerics/LinearAlgebra/Double/SparseVector.cs
  7. 18
      src/Numerics/LinearAlgebra/Single/DenseVector.cs
  8. 8
      src/Numerics/LinearAlgebra/Single/SparseVector.cs
  9. 15
      src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs
  10. 26
      src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs

18
src/Numerics/LinearAlgebra/Complex/DenseVector.cs

@ -126,17 +126,21 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
{
}
/// <summary>
/// Create a new dense vector and initialize each value using the provided init function.
/// </summary>
public static DenseVector Create(int length, Func<int, Complex> init)
{
return new DenseVector(DenseVectorStorage<Complex>.OfInit(length, init));
}
/// <summary>
/// Create a new dense vector with values sampled from the provided random distribution.
/// </summary>
public static DenseVector CreateRandom(int size, IContinuousDistribution distribution)
public static DenseVector CreateRandom(int length, IContinuousDistribution distribution)
{
var storage = new DenseVectorStorage<Complex>(size);
for (var i = 0; i < storage.Data.Length; i++)
{
storage.Data[i] = new Complex(distribution.Sample(), distribution.Sample());
}
return new DenseVector(storage);
return new DenseVector(DenseVectorStorage<Complex>.OfInit(length,
i => new Complex(distribution.Sample(), distribution.Sample())));
}
/// <summary>

8
src/Numerics/LinearAlgebra/Complex/SparseVector.cs

@ -127,6 +127,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
{
}
/// <summary>
/// Create a new sparse vector and initialize each value using the provided init function.
/// </summary>
public static SparseVector Create(int length, Func<int, Complex> init)
{
return new SparseVector(SparseVectorStorage<Complex>.OfInit(length, init));
}
/// <summary>
/// Creates a matrix with the given dimensions using the same storage type
/// as this vector.

18
src/Numerics/LinearAlgebra/Complex32/DenseVector.cs

@ -126,17 +126,21 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
{
}
/// <summary>
/// Create a new dense vector and initialize each value using the provided init function.
/// </summary>
public static DenseVector Create(int length, Func<int, Complex32> init)
{
return new DenseVector(DenseVectorStorage<Complex32>.OfInit(length, init));
}
/// <summary>
/// Create a new dense vector with values sampled from the provided random distribution.
/// </summary>
public static DenseVector CreateRandom(int size, IContinuousDistribution distribution)
public static DenseVector CreateRandom(int length, IContinuousDistribution distribution)
{
var storage = new DenseVectorStorage<Complex32>(size);
for (var i = 0; i < storage.Data.Length; i++)
{
storage.Data[i] = new Complex32((float)distribution.Sample(), (float)distribution.Sample());
}
return new DenseVector(storage);
return new DenseVector(DenseVectorStorage<Complex32>.OfInit(length,
i => new Complex32((float) distribution.Sample(), (float) distribution.Sample())));
}
/// <summary>

8
src/Numerics/LinearAlgebra/Complex32/SparseVector.cs

@ -127,6 +127,14 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
{
}
/// <summary>
/// Create a new sparse vector and initialize each value using the provided init function.
/// </summary>
public static SparseVector Create(int length, Func<int, Complex32> init)
{
return new SparseVector(SparseVectorStorage<Complex32>.OfInit(length, init));
}
/// <summary>
/// Creates a matrix with the given dimensions using the same storage type
/// as this vector.

18
src/Numerics/LinearAlgebra/Double/DenseVector.cs

@ -127,17 +127,21 @@ namespace MathNet.Numerics.LinearAlgebra.Double
{
}
/// <summary>
/// Create a new dense vector and initialize each value using the provided init function.
/// </summary>
public static DenseVector Create(int length, Func<int, double> init)
{
return new DenseVector(DenseVectorStorage<double>.OfInit(length, init));
}
/// <summary>
/// Create a new dense vector with values sampled from the provided random distribution.
/// </summary>
public static DenseVector CreateRandom(int size, IContinuousDistribution distribution)
public static DenseVector CreateRandom(int length, IContinuousDistribution distribution)
{
var storage = new DenseVectorStorage<double>(size);
for (var i = 0; i < storage.Data.Length; i++)
{
storage.Data[i] = distribution.Sample();
}
return new DenseVector(storage);
return new DenseVector(DenseVectorStorage<double>.OfInit(length,
i => distribution.Sample()));
}
/// <summary>

8
src/Numerics/LinearAlgebra/Double/SparseVector.cs

@ -127,6 +127,14 @@ namespace MathNet.Numerics.LinearAlgebra.Double
{
}
/// <summary>
/// Create a new sparse vector and initialize each value using the provided init function.
/// </summary>
public static SparseVector Create(int length, Func<int, double> init)
{
return new SparseVector(SparseVectorStorage<double>.OfInit(length, init));
}
/// <summary>
/// Creates a matrix with the given dimensions using the same storage type
/// as this vector.

18
src/Numerics/LinearAlgebra/Single/DenseVector.cs

@ -126,17 +126,21 @@ namespace MathNet.Numerics.LinearAlgebra.Single
{
}
/// <summary>
/// Create a new dense vector and initialize each value using the provided init function.
/// </summary>
public static DenseVector Create(int length, Func<int, float> init)
{
return new DenseVector(DenseVectorStorage<float>.OfInit(length, init));
}
/// <summary>
/// Create a new dense vector with values sampled from the provided random distribution.
/// </summary>
public static DenseVector CreateRandom(int size, IContinuousDistribution distribution)
public static DenseVector CreateRandom(int length, IContinuousDistribution distribution)
{
var storage = new DenseVectorStorage<float>(size);
for (var i = 0; i < storage.Data.Length; i++)
{
storage.Data[i] = (float)distribution.Sample();
}
return new DenseVector(storage);
return new DenseVector(DenseVectorStorage<float>.OfInit(length,
i => (float) distribution.Sample()));
}
/// <summary>

8
src/Numerics/LinearAlgebra/Single/SparseVector.cs

@ -127,6 +127,14 @@ namespace MathNet.Numerics.LinearAlgebra.Single
{
}
/// <summary>
/// Create a new sparse vector and initialize each value using the provided init function.
/// </summary>
public static SparseVector Create(int length, Func<int, float> init)
{
return new SparseVector(SparseVectorStorage<float>.OfInit(length, init));
}
/// <summary>
/// Creates a matrix with the given dimensions using the same storage type
/// as this vector.

15
src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs

@ -99,6 +99,21 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
return storage;
}
public static DenseVectorStorage<T> OfInit(int length, Func<int, T> init)
{
if (length < 1)
{
throw new ArgumentOutOfRangeException("length", string.Format(Resources.ArgumentLessThanOne, length));
}
var data = new T[length];
for (int i = 0; i < data.Length; i++)
{
data[i] = init(i);
}
return new DenseVectorStorage<T>(length, data);
}
public static DenseVectorStorage<T> OfEnumerable(IEnumerable<T> data)
{
if (data == null)

26
src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs

@ -291,6 +291,32 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
return storage;
}
public static SparseVectorStorage<T> OfInit(int length, Func<int, T> init)
{
if (length < 1)
{
throw new ArgumentOutOfRangeException("length", string.Format(Resources.ArgumentLessThanOne, length));
}
var indices = new List<int>();
var values = new List<T>();
for (int i = 0; i < length; i++)
{
var item = init(i);
if (!Zero.Equals(item))
{
values.Add(item);
indices.Add(length);
}
}
return new SparseVectorStorage<T>(length)
{
Indices = indices.ToArray(),
Values = values.ToArray(),
ValueCount = values.Count
};
}
public static SparseVectorStorage<T> OfEnumerable(IEnumerable<T> data)
{
if (data == null)

Loading…
Cancel
Save