2016-04-23 15 views
1

Ich verwende MathNet.Numerics-Paket für die Matrixberechnung.2D-Array - ein Nested-Array-Initializer wird erwartet. C#

Für Matrix Deklaration und Initialisierung der erwartete Code lautet wie folgt:

Matrix<double> A = DenseMatrix.OfArray(new double[,] { 
     {1,1,1,1}, 
     {1,2,3,4}, 
     {4,3,2,1}}); 

In meinem eigenen Code, ich habe drei eindimensionale Arrays - xPointsSquared, yPoints, ein.

ich den Fehler - „eine verschachtelte Feldinitialisierung wird erwartet“, wenn sie versuchen, die Matrix in dieser wie folgt zu initialisieren,

Matrix<double> A = DenseMatrix.OfArray(new double[,] { 
     xPointsSquared, 
     yPoints, 
     one}); 

Antwort

1

Ich würde vorschlagen, zum Beispiel stattdessen eine geeignetere Bau-Funktion:

Matrix<double> A = CreateMatrix.DenseOfRowArrays(xPointsSquared, yPoints, one); 

Siehe Creating Matrices and Vectors in der Dokumentation für mehr Alternative.

+0

Muss es nicht DenseOfColumnArrays sein, wenn die Matrix die Dimension 3660x3 hat? – DazedNConfused

+0

Ja, wenn die Arrays Spalten statt Zeilen darstellen, würde DenseOfColumnArrays die Aufgabe übernehmen. –

1

2D-Array muss mit verschachtelter Feldinitialisierung initialisiert werden. Und es ist nicht das gleiche mit der Initialisierung von gezackten Array double [] []. Was Sie im zweiten Fall tun, ist das Initialisieren von gezackten Arrays, nicht das Initialisieren von 2D-Arrays. Wenn Sie Ihr 2D-Array mit Ihrem drei eindimensionalen Array initialisieren möchten, müssen Sie das Array-Element einzeln einfügen.

Matrix<double> A = DenseMatrix.OfArray(new double[,] { 
    { xPointsSquared[0], xPointsSquared[1], xPointsSquared[2], xPointsSquared[3] }, 

    {yPoints[0], yPoints[1], yPoints[2], yPoints[3],}, 
    {one[0],one[1],one[2],one[3]}}); 

Mein Vorschlag für Ihren Fall ist für Schleife machen Elemente einfügen verdoppeln [,], bevor Sie die Doppel mit [,] als Input für die Matrix-Klasse-Konstruktor.

double[,] mat = new double[3,3600]; 
for(int i = 0; i < 3600;++i{ 
    mat[0,i] = xPointsSquared[i]; 
    mat[1,i] = yPoints[i]; 
    mat[2,i] = one[i]; 
} 

Matrix<double> A = DenseMatrix.OfArray(mat); 
+0

Ah! also gibt es keinen Weg um es herum? Weil ich 3600 Elemente in jedem Array habe. – DazedNConfused

+0

Sie könnten die for-Schleife verwenden, um die Elemente einzufügen, um zuerst [,] zu verdoppeln, bevor Sie den doppelten [,] als Eingabe für Ihre Matrix setzen. – Ian

+0

Antwort aktualisiert. – Ian

Verwandte Themen