Wie kann man eine 2D Matrix an Ort und Stelle transponieren?Howto multidimensionales Array an Ort und Stelle umsetzen
Antwort
for (int i=0; i<n; i++) {
for (int j=0; j<i; j++) {
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
WARNUNG! Dies ist nur für quadratische Arrays korrekt. Siehe unten den Wikipedia-Link von @ dlb für eine nicht-quadratische Matriximplementierung. – Mayank
Sie haben keine Sprache angegeben, aber in der Regel, was Sie tun, ist:
let a be your array.
for each i,j with i<j switch a[i,j] with a[j,i]
Um die Transponierung einer quadratischen Matrix zu erhalten wir brauchen Elemente oberhalb der Hauptdiagonale oder darunter zu berücksichtigen und Tauschen Sie jedes mit seiner Reflexion entlang der Hauptdiagonale:
for i->0 to N-1
for j->i+1 to N-1
swap matrix[i][j] with matrix[j][i]
Warum stören? Tauschen Sie einfach Indizes in jeder Zugriffsanweisung.
Beim Zugriff auf 2D-Arrays in der "falschen" Reihenfolge gibt es eine erhebliche Leistungseinbuße - es ist oft besser, den Preis einer Transponierung zu bezahlen, um die Vorteile des zusammenhängenden Speicherzugriffs (Einheitsschritt) zu nutzen. –
Wikipedia hatte einen Artikel In-Place-Matrix-Transposition. Der Artikel behandelt nichtquadratische Matrizen.
Dies scheint gut zu funktionieren:
function transpose(a)
{
return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
in C#
string[,] Value;
//fill Value
//create transposed array
ValueAux = new string[Value.GetLength(1),Value.GetLength(0)];
for (i = 0; i < Value.GetLength(0); i++)
{
for (j = 0; j < Value.GetLength(1); j++)
{
Valueaux[j, i] = Value[i, j];
}
}
Das Ergebnis ist in ValueAux
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i!=j && j>i)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
(N
ist die Größe Ihres Arrays)
- 1. Filtervektor an Ort und Stelle
- 2. Wie Array-Elemente an Ort und Stelle ersetzen
- 3. Python: Karte an Ort und Stelle
- 4. Wie instdiate stdClass an Ort und Stelle
- 5. scala sort indexedseq an Ort und Stelle
- 6. Django Bearbeitung an Ort und Stelle
- 7. Matrix an Ort und Stelle drehen
- 8. Ruby CSV :: Tabelle an Ort und Stelle sortieren
- 9. Wie aktualisieren Sie ein Kombinationsfeldelement an Ort und Stelle?
- 10. Babelify die Dateien an Ort und Stelle, in mehreren Verzeichnissen
- 11. An Ort und Stelle Löschen von Golang-Scheibenelementen
- 12. So sortieren Sie eine Datei an Ort und Stelle
- 13. Ansichten ändern, aber den Hintergrund an Ort und Stelle lassen
- 14. Dateien finden, an Ort und Stelle umbenennen unix bash
- 15. Pandas Dataframe Fillna() nur einige Spalten an Ort und Stelle
- 16. Wie an Ort und Stelle gespeichert in lisp angrenzenden
- 17. An Ort und Stelle mpi_reduce stürzt mit OpenMPI
- 18. Sperren von SSRS-Feldern an Ort und Stelle
- 19. Umkehren einer '\ 0' terminierten C-Zeichenfolge an Ort und Stelle?
- 20. Meine Sprite-Rotation bleibt nicht an Ort und Stelle
- 21. Algorithmus zum Sortieren des Stapels an Ort und Stelle
- 22. Eigen LDLT Cholesky-Zerlegung an Ort und Stelle
- 23. Multidimensionales Array
- 24. json multidimensionales Array und jquery?
- 25. Jquery multidimensionales Array und Diagramm
- 26. TWIG, multidimensionales Array und Foreach
- 27. Multidimensionales Array von String
- 28. jQuery Multidimensionales Array erstellen
- 29. multidimensionales Array zu Bild
- 30. Multidimensionales Array in Python
Quadrat oder nicht? es macht einen großen Unterschied – Anycorn
@aaa: Transponieren einer nicht-quadratischen Matrix an Ort und Stelle macht nicht viel Sinn. – Jens
Obwohl es abhängig von der Darstellung (zum Beispiel mit einem einzigen Array von N * M Dimensionen) könnte es getan werden. –