2009-09-14 4 views
1

j'ai besoin (pour le prototypage rapide et l'intégration des bibliothèques) quelque chose comme ceci (extensions pour les tableaux usuels)doubles [,], int [], bool [] ... matrice, extensions de manipulation de vecteur en C#

 

double[] d; 
d.SetRow(1,{ 1.1 , 2.0 ,3.3}); 
var r = d.GetRow(1); 
d = d.AppendRight(new int[]{1,2,3}); 
... 

Existe-t-il une telle chose n'importe où? Peut-être que quelqu'un l'a implémenté, donc je n'en ai pas besoin moi-même?

+1

« On peut être mis en œuvre tout le monde donc je ne dois-je besoin pour moi moi-même? » Peut-être que votre patron a besoin de trouver quelqu'un d'autre pour le faire. – RvdK

+0

Des méthodes d'extension à de telles fins seraient très utiles, je suis d'accord. Cependant, ne voudriez-vous pas opérer sur des tableaux 2D, par ex. 'int [,]' et tel? – Noldorin

+0

Oui. J'ai aussi besoin de ça. –

Répondre

0

Cela ne devrait pas être trop difficile à écrire vous-même.

La chose à faire très attention est de savoir comment les tableaux peuvent être modifiés en tant que propriétés.

Quelque chose comme (code non testé très rude, mais devrait vous donner une idée):

public class ArrayRow<T> { 
    //add your own ..ctor etc 

    T[,] matrix; //don't make this public see http://msdn.microsoft.com/en-us/library/k2604h5s.aspx 
    public int Index { get; private set; } 

    //note that this will be a copy 
    public T[] GetValues() { 
     T[] retval = new T[matrix.GetLength(1)]; 
     for (int i = 0; i < retval.Length; i++) 
      retval[i] = matrix[Index, i]; 

     return retval; 
    } 

    public void SetValues(T[] values) 
    //..and so on, you get the idea 
} 

Ensuite, vous étendez le tableau:

public static ArrayExtensions { 

    public void SetRow<T> (this T[,] matrix, int rowIndex, T[] values) { 
     //check rowIndex in range and array lengths match 
    } 

    public ArrayRow<T> GetRow<T> (this T[,] matrix, int rowIndex) { 
     //check rowIndex in range 
     return new ArrayRow<T> (matrix, rowIndex); 
    } 
} 

Ensuite, vous pouvez compter sur le paramètre de type étant inférée .

+0

Je n'ai pas besoin de cours. Je connais les extensions et les types génériques. Je peux tout mettre en œuvre moi-même. Mais il faudra du temps non seulement pour écrire, mais pour tester - pour que tout fonctionne correctement. Donc, je demande à propos de l'existence d'une telle base de code, donc je n'aurai pas besoin de recommencer à zéro. –

+0

Je crains de ne pas connaître une bibliothèque existante pour cela.Avec votre exemple, vous aurez besoin d'une sorte de classe pour votre 'var r = d.GetRow ...' - car le résultat sera une copie d'une 'ligne' plutôt qu'une référence au tableau multidimensionnel – Keith

+0

Copier (comme double [] instance) est OK. Je me fiche de la performance et de l'utilisation de la mémoire. Le comportement semblable à celui de MATLAB (aucun moyen d'obtenir une référence de ligne) me satisfait. –

0

Les langues comme les listes de support Python avec des types mixtes. Vous pouvez créer un script IronPython, puis l'appeler depuis votre application C#. Suivez this link pour voir comment vous pouvez appeler le script IronPython à partir de votre application.

3

Jetez un oeil à Math.NET. C'est une bibliothèque mathématique open-source. Vous trouverez probablement ce dont vous avez besoin. Ils ont un exemple utilisant une matrice à la fin de ce page.

+0

Je connais Math.NET, dnAnalytics et etc. Mais ils ont tous des classes matricielles. Mais je n'en ai pas besoin. Ce dont j'ai besoin: Pour ex je peux comparer mon algorithme de classification avec thous sont en SVM.NET, NeronDotNet, alglib.net. Ils utilisent tous des tableaux différents dans les méthodes public Problème (nombre entier, double [] y, noeud [] [] x, entier maxIndex) public static void nbcbuildm (ref double [,] xy, ref bool [,] m, int npoints, ref int [] f, int nvars, int nclasses, int drapeaux, ref int info, ref double [] b, ref nbcreport rep) ... J'ai besoin de routines de conversion et de préparation de données - idéalement - extensions de tableaux –

0

j'ai écrit matrice Extensions C# bibliothèque pour les extensions de test de conception basée sur la génération de code http://matrixextensions.codeplex.com/

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. –

Questions connexes