Transponiere 1 Dimensions-Array

8

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}

ist

Wenn ich es auf ein Array der Dimension 1024 * 1024 skalieren möchte, wie wird die Logik aussehen?

    
Legolas 02.10.2011, 21:14
quelle

6 Antworten

18

Mit n = sqrt(N) könntest du einfach etwas Einfaches versuchen wie:

%Vor%     
wxffles 02.10.2011, 21:22
quelle
8

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]

machen

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 ...

    
cJ Zougloub 02.10.2011 21:25
quelle
1
%Vor%     
BLUEPIXY 02.10.2011 21:36
quelle
1

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.

    
Foo Bah 02.10.2011 21:39
quelle
0

ohne Swap-Funktion. len ist die Länge des Arrays.

%Vor%     
SP6 02.10.2011 21:32
quelle
0
%Vor%

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%     
wildplasser 03.10.2011 12:29
quelle

Tags und Links