Also habe ich ein EIN-dimensionales Array mit N Werten, wobei N ein perfektes Quadrat ist. Ich visualisiere dieses eindimensionale Array als ein zweidimensionales Array (obwohl es nicht ist). Zum Beispiel ein Array mit den Werten int Array = { 0,1,2,3,4,5,6,7,8 }
Das ist
%Vor%Dies wird als
gedruckt %Vor%Also möchte ich die Position im eindimensionalen Array so vertauschen, dass ich die Transponierte davon bekomme, ...
Zum Beispiel ...
%Vor% Dies ist im Grunde das gleiche eindimensionale Array, aber die Werte werden so vertauscht, dass das Array nun int Array = {0,3,6,1,4,7,2,5,8}
Wenn ich es auf ein Array der Dimension 1024 * 1024 skalieren möchte, wie wird die Logik aussehen?
Die Transpose-Operation führt swap(v[y][x],v[x][y])
für das obere oder untere Dreieck mit Ausnahme der Diagonalen der Matrix aus (sagen wir oben).
In einem eindimensionalen C-Vektor vc
entspricht v[y][x]
vc[y*n+x]
.
Also möchtest du vc[y*n+x] = vc[x*n+y]
Die Elemente, die Sie austauschen möchten, sind diejenigen, für die x > y
.
Am Ende machst du:
%Vor%Du hättest das selbst herausfinden können ...
Sie können entweder die Werte in der Matrix tauschen oder die Interpretation in den späteren Funktionen vertauschen.
Zum Beispiel können Sie anstelle von (i, j) ein (j, I) drucken und die Trans- pose drucken.
Wenn Sie das sagen, was genau versuchen Sie zu tun? Wenn Sie LAPACK und BLAS betrachten, verwenden ihre Routinen Flags, die die Algorithmen steuern, um sie normal oder transponiert zu interpretieren.
Die obige Funktion gibt den "anderen" Index des Index zurück (der in der transponierten Matrix: = mit x und y getauscht). dim0 und dim1 sind die "horizontale" und "vertikale" Größe der Matrix. Der # ifdeffed-out-Teil ist die naive Implementierung. In Ihrem Fall könnten Sie das 1-dimensionale Array initialisieren (oder analysieren) mit:
%Vor%