csharp-numsharp

Computación Numérica en .NET con NumSharp

NumSharp es una biblioteca de código abierto para .NET diseñada para facilitar la computación numérica y el análisis de datos, emulando la funcionalidad de NumPy (una de las bibliotecas más populares en el ecosistema de Python).

NumSharp proporciona una API sencilla para manipular matrices, realizar cálculos matemáticos y trabajar con datos numéricos en aplicaciones .NET.

Características de NumSharp:

  • Matrices N-dimensionales: Soporte para arrays multidimensionales, similares a los arrays de NumPy.
  • Operaciones Matemáticas: Funciones para álgebra lineal, estadísticas y operaciones matemáticas generales.
  • Interoperabilidad con ML.NET: Facilita la integración con ML.NET para el desarrollo de modelos de aprendizaje automático.
  • Compatibilidad: Funciona en proyectos de .NET Core y .NET Framework.

Instalación de NumSharp

Puedes instalar NumSharp a través del administrador de paquetes NuGet. Abre tu terminal o la consola del administrador de paquetes de Visual Studio y ejecuta el siguiente comando:

Install-package NumSharp

O mediante la interfaz de NuGet en Visual Studio, busca NumSharp e instálalo en tu proyecto.

Cómo Usar NumSharp

Creación de Arrays y Matrices

NumSharp proporciona una clase NDArray para trabajar con arrays multidimensionales. Aquí hay un ejemplo básico de cómo crear y manipular arrays:

using NumSharp;

class Program
{
    static void Main(string[] args)
    { 
		// Crear un array unidimensional
		var array1D = np.array(new int[] { 1, 2, 3, 4, 5 });

		// Crear un array bidimensional
		var array2D = np.array(new int[,] { { 1, 2 }, { 3, 4 } });

		// Mostrar los arrays
		Console.WriteLine("Array 1D:");
		Console.WriteLine(array1D.ToString());

		Console.WriteLine("Array 2D:");
		Console.WriteLine(array2D.ToString());
    }
}
Array 1D:
[1, 2, 3, 4, 5]
Array 2D:
[[1, 2],
[3, 4]]

Operaciones Matemáticas Básicas

NumSharp incluye una serie de funciones matemáticas útiles para operaciones básicas en arrays y matrices:

using NumSharp;

class Program
{
    static void Main(string[] args)
    {
        var array = np.array(new double[] { 1, 2, 3, 4, 5 });

        // Operaciones matemáticas
        var squared = np.power(array, 2); // Eleva cada elemento al cuadrado
        var sum = np.sum(array); // Suma todos los elementos

        Console.WriteLine("Array Original:");
        Console.WriteLine(array.ToString());

        Console.WriteLine("Array Cuadrado:");
        Console.WriteLine(squared.ToString());

        Console.WriteLine("Suma de Elementos:");
        Console.WriteLine(sum.ToString());
    }
}

Manipulación de Datos

NumSharp permite realizar operaciones complejas en matrices, como transposición, redimensionamiento y operaciones matemáticas avanzadas:

using NumSharp;

class Program
{
    static void Main(string[] args)
    {
        // Crear una matriz de 3x3
        var matrix = np.array(new double[,] {
            { 1, 2, 3 },
            { 4, 5, 6 },
            { 7, 8, 9 }
        });

        // Transponer la matriz
        var transpose = np.transpose(matrix);

        // Redimensionar la matriz a 1x9
        var reshape = np.reshape(matrix, new Shape(1, 9));

        Console.WriteLine("Matriz Original:");
        Console.WriteLine(matrix.ToString());

        Console.WriteLine("Matriz Transpuesta:");
        Console.WriteLine(transpose.ToString());

        Console.WriteLine("Matriz Redimensionada:");
        Console.WriteLine(reshape.ToString());
    }
}

Integración con ML.NET

NumSharp es compatible con ML.NET, lo que facilita el trabajo con datos numéricos en el contexto del aprendizaje automático:

using NumSharp;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        // Crear un array de características
        var features = np.array(new double[] { 1.0, 2.0, 3.0, 4.0, 5.0 });

        // Utilizar NumSharp para preparar datos para ML.NET
        var normalizedFeatures = (features - np.min(features)) / (np.max(features) - np.min(features));

        Console.WriteLine("Características Normalizadas:");
        Console.WriteLine(normalizedFeatures.ToString());
    }
}