Wie man 1D-Spalte-array-und 1D-Zeilen-Arrays aus 2D-Arrays? (C# .NET)
habe ich double[,] Array;
. Ist es möglich, etwas zu bekommen, wie double[] ColumnArray0 = Array[0,].toArray()
und double[] RowArray1 = Array[,1].toArray()
ohne eine Kopie von jedem elemet(mit für)?
Dank.
- Ich verstehe nicht deine Frage, aber warum würden Sie brauchen, zu tun, eh?
- Im Versuch zur Implementierung der FFT auf das Bild (2D-array) und seine umgesetzt durch die 1D-FFT Berufung auf die Zeilen und dann auf Spalten. Es wäre schön, nicht, um unnötige arrays oder-Zyklen.FFT (Zeit und Speicher in Anspruch nimmt)
- Ich denke, Sie sollten nicht implementieren algorithmen für die Bildverarbeitung selbst, suchen Sie nach FFT für Bilder, die in C# und können Sie finden die Leute es schon gemacht. es implementiert werden könnte, für OpenCV mit C# oder wenn es nicht für die Produktion Zweck, nur stick mit matlab oder sowas
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arrays werden auf einen Speicherbereich, wo alle Einträge gespeichert sind, in einer fortlaufenden Art und Weise. Je nach Format der Daten im Speicher dies ist nur möglich, wenn Sie entweder auf Zeilen oder Spalten.
Anstelle des 2d-array
double[,]
Art ist in Ihrem Fall besser, verwenden Sie ein array von arraysdouble[][]
Je nachdem, wie du die Daten in deinem array, Sie können auch behandeln die
Array2d
als Spalte-array. Aber beide gleichzeitig ist nicht möglich.Haben Sie auch einen Blick hier:
Mehrdimensionale Array [][] vs [,]
[,]
?Obwohl es sehr spät ist, möchte ich eine alternative Antwort auf die Frage.
Der erste wichtige Teil der Frage war in der Lage sein, um Zugriff auf vollständige Zeilen ODER Spalten der matrix. Eine Möglichkeit, dies zu tun ist durch die Verwendung von extension-Methoden:
Beispiel:
Erste, was zu beachten ist, dass man diese generischen Methoden mit jeder Art von [,]-Matrizen und die entsprechenden []-Vektoren. Sich vorstellen, austauschen der
T
s mitdouble
s, und Sie bekommen die spezielle version für 'double' (als gefragt wurde, durch die OP).Zweite Sache ist, dass das abrufen und festlegen der Zeilen verwendet
Array.Copy
, während die erste und die Einstellung der Spalten in einer Schleife verarbeitet. Dies ist aufgrund der Row-Major-Reihenfolge von C#, welches es ermöglicht, die erste, die zweite jedoch nicht. Natürlich können beide umgesetzt werden, die mit einer Schleife, wie man Sie auskommentiert.Stellen Sie sicher, pass korrekten Abmessungen für die set-Methoden, oder das Programm zum Absturz (Fehler-und dimension prüfen können einfach Hinzugefügt werden). Die ganze Logik konnte so gut umgesetzt werden, für jagged arrays wie
double[][]
jedoch, die OP specificially gebeten für mehrdimensionale lieben.Als für den zweiten Teil der Frage: Wenn die matrix besteht aus Doppel -, und da Doppel ein Werttyp ist, die Werte werden immer kopiert werden. So Ihr gewünschte Verhalten nicht kopieren der Werte nicht möglich wäre. Jedoch, wenn die Verwendung von Objekten als
T
nur der Verweis auf das Objekt kopiert werden soll, und nicht das Objekt selbst (also Vorsicht mutiert die 'kopiert' - Objekt).Schließlich, wenn Sie wirklich nicht wollen, kopieren Sie die double-Werte, würde ich vorschlagen, indem Sie Ihre gesamte matrix (nur die Referenz übergeben wird), und dann direkt Durchlaufen der gewünschten Spalten und/oder Zeilen.