double [,], int [], bool [] & # 8230; matrice, estensioni di manipolazione vettoriale in C #

StackOverflow https://stackoverflow.com/questions/1421125

  •  07-07-2019
  •  | 
  •  

Domanda

Ho bisogno di (per la prototipazione rapida e l'integrazione delle librerie) qualcosa del genere (estensioni per le normali matrici)


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

Esiste qualcosa del genere ovunque? Qualcuno potrebbe averlo implementato, quindi non ho bisogno di farlo anch'io per me?

È stato utile?

Soluzione

Non dovrebbe essere troppo difficile scrivere te stesso.

La cosa di cui bisogna fare molta attenzione è come gli array possono essere modificati come proprietà.

Qualcosa di simile (codice non testato molto approssimativo, ma dovrebbe darti un'idea):

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
}

Quindi estendi l'array:

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 );
    }
}

Quindi puoi fare affidamento sul parametro type inferito.

Altri suggerimenti

Dai un'occhiata a Math.NET . È una libreria matematica open source. Probabilmente troverai quello che ti serve.

Hanno un esempio usando una matrice alla fine di questa .

Lingue come Python supportano elenchi con tipi misti. È possibile creare uno script IronPython e quindi chiamarlo dall'applicazione C #. Segui questo link per sapere come chiamare lo script IronPython dalla tua app.

Ho scritto Extrix Matrix libreria C # su progettazione di generazione di codice basata su estensioni di test.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top