# Matrix transponieren



## ToBe4minimal (24. Mai 2011)

Hallo Ihr Lieben,

ich hab ne Matrix die ich um 90 Grad drehen (transponieren) soll.

Hab jetzt alle Foren und das Internet durchgestöbert... aber finde immer nur das gleiche, nur, so funktioniert es nicht ganz...

Erstmal mein Code:

```
public class Matrix
{
    private int [][] elemente;
    private int [][] transponierte;
```

Ein Bequemlichkeitskonstruktor (hab verschiedene gemacht, unter anderem auch einen mit Zufallszahlen und son Kram und wo man die Anzahl der Zeilen und Spalten angeben kann, aber mit dem ist es erstmal am einfachsten):

```
public Matrix()
    {   
        elemente = new int [][]{{1,2},{3,4}};  
    }
```

So nun haben wir ein ganz kleines 2D Array.

Nun will ich das drehen.


```
public void transponieren()
    {
        transponierte = new int [elemente.length][elemente[0].length];
        if(elemente.length == elemente[0].length)
        {
            for(int i=0;i<elemente.length;i++)
            {
                for (int j=0;j<elemente[i].length;j++)
                {
                    transponierte[j][i] = elemente[i][j];
                }
            }
        }
        else
        {
            System.out.println("Das Array ist nicht rechteckig!");
        }
    }
```


Das man dafür einfach en neues Array anlegt und ne verschachtelte for Schleife macht, ist klar, jedoch steht überall im Internet als Anweisung in der verschachtelten for Schleife nur:

```
transponierte[j][i] = elemente[i][j];
```


Und das alleine reicht definitiv nicht aus.

Aus 

1 2
3 4

wird

1 3
2 4


Und dabei handelt es sich ja nicht um eine 90° Drehung...



Liebe Grüße
Tobi


----------



## tfa (24. Mai 2011)

Wie kommst du darauf, dass Transponieren einer 90°-Drehung (der Matrx??) entspricht?

Matrix (Mathematik) ? Wikipedia


----------



## faetzminator (24. Mai 2011)

Du musst noch an Stelle statt [c]i[/c] als Index einfach [c]elemente.length - i - 1[/c] verwenden und dann klappts


----------



## ToBe4minimal (24. Mai 2011)

tfa hat gesagt.:


> Wie kommst du darauf, dass Transponieren einer 90°-Drehung (der Matrx??) entspricht?
> 
> Matrix (Mathematik) ? Wikipedia




Ist dem nicht so??

So wurde es mir erklärt von unserem Tutor...

In der Aufgabenstellung steht was von Matrix transponieren...

Und er erklärte es so, dass es sich dabei um eine 90 Grad Drehung des gesamten Arrays handelt...


----------



## Dekker (24. Mai 2011)

ToBe4minimal hat gesagt.:


> Ist dem nicht so??
> 
> So wurde es mir erklärt von unserem Tutor...
> 
> ...



Äh ja, die Transponierte erhälst du indem du die Ursprungsmatrix "bildlich gesprochen" um 90grad drehst. Hier besteht das Missverständnis, dass es sich um ein konstrukt aus der graphischen Datenverarbeitung handelt. Du sagst es nämlich so das man denken könnte du meinst eine 90 grad Drehung um einen Punkt, praktisch eine Abbildung...


----------



## ToBe4minimal (24. Mai 2011)

Da hat man mir wohl was falsches erklärt??!!

Aufgabenstellung:
iv) Als transponierte Matrix wird die Matrix bezeichnet, deren Elemente so vertauscht wurden,
dass das Element mit dem Index i, j durch das Element mit dem Index j, i ersetzt wird. Dabei
wird die Matrix quasi um ihre Hauptdiagonale gekippt.


Wenn man die Aufgabenstellung so liest, scheint meine Lösung ja bereits doch richtig zu sein...

Sehe ich doch richtig, oder??

Aus

1 2
3 4

wird

1 3
2 4


Die Matrix wird um die Hauptdiagonale gekippt.

Stimmt doch, oder??


----------



## SlaterB (24. Mai 2011)

wenn man sie im Raum dreht, sind es aber 180 Grad 
ein Buch umklappen, 
naja Wikipedia sagt alles, den Link zu ignorieren sagt auch etwas

edit:
> Die Matrix wird um die Hauptdiagonale gekippt.

> Stimmt doch, oder?? 

durchaus


----------



## Crian (24. Mai 2011)

Betrachtest du nur quadratische Matrizen? Anderenfalls solltest du nicht-quadratische Testfälle betrachten.


----------



## ToBe4minimal (24. Mai 2011)

Dekker hat gesagt.:


> Äh ja, die Transponierte erhälst du indem du die Ursprungsmatrix "bildlich gesprochen" um 90grad drehst. Hier besteht das Missverständnis, dass es sich um ein konstrukt aus der graphischen Datenverarbeitung handelt. Du sagst es nämlich so das man denken könnte du meinst eine 90 grad Drehung um einen Punkt, praktisch eine Abbildung...



Er erklärte es so, dass aus

1 2
3 4

3 1
4 2

werden müsste.
Jedenfalls hatte ich es so verstanden.
Das entspräche für meine Begriffe einer 90° Drehung der gesamten Matrix.


Die Aufgabenstellung besagt meiner Ansicht nach aber etwas anderes.


----------



## ToBe4minimal (24. Mai 2011)

SlaterB hat gesagt.:


> wenn man sie im Raum dreht, sind es aber 180 Grad
> ein Buch umklappen,
> naja Wikipedia sagt alles, den Link zu ignorieren sagt auch etwas
> 
> ...



Sorry, hab den Link gar nicht gesehen...


----------



## ToBe4minimal (24. Mai 2011)

> edit:
> > Die Matrix wird um die Hauptdiagonale gekippt.
> 
> > Stimmt doch, oder??
> ...




Dann hab ichs ja doch richtig...


----------



## SlaterB (24. Mai 2011)

soweit ich es zu dem Zeitpunkt beurteilt habe, was nicht richtig sein muss,
siehe z.B. noch das Posting nach meinem vorherigen, falls du das nicht sowieso schon machst und alles einzeln beantwortest


----------



## ToBe4minimal (24. Mai 2011)

SlaterB hat gesagt.:


> wenn man sie im Raum dreht, sind es aber 180 Grad
> ein Buch umklappen




Jetzt versteh ich es auch, wie es gemeint war.

Die Matrix wird praktisch um 180 Grad um die eigene Achse gedreht.

Dann hat er es mir aber wirklich falsch erklärt.


----------



## ToBe4minimal (24. Mai 2011)

SlaterB hat gesagt.:


> soweit ich es zu dem Zeitpunkt beurteilt habe, was nicht richtig sein muss,
> siehe z.B. noch das Posting nach meinem vorherigen, falls du das nicht sowieso schon machst und alles einzeln beantwortest



Ja sorry, ich mache das, damit es noch verständlich bleibt.


Doch, ich glaube wir verstehen uns richtig und ich glaube ich habe es auch richtig.

Die Aufgabenstellung ist ja folgende:
iv) Als transponierte Matrix wird die Matrix bezeichnet, deren Elemente so vertauscht wurden,
dass das Element mit dem Index i, j durch das Element mit dem Index j, i ersetzt wird. Dabei
wird die Matrix quasi um ihre Hauptdiagonale gekippt.


Mein Code macht mit meiner Matrix folgendes:

Aus 

1 2
3 4

wird 

1 3
2 4


Also für meine Begriffe sollten wir genau das tun.


----------



## SlaterB (24. Mai 2011)

dann passe wenigstens noch die Fehlermeldung an:
> System.out.println("Das Array ist nicht rechteckig!");

ein Array ist quasi immer rechteckig, alles andere ließe sich aus einem einfachen Vergleich gar nicht feststellen,
du meinst hier quadratisch oder nicht?

ob nicht-quadratische auch funktionieren sollen ist ja gerade der Punkt, 
wenn du willst versuche das auch als Eingabe, dürften nur noch kleine Änderungen nötig sein, dann ginge das auch


----------



## ToBe4minimal (24. Mai 2011)

SlaterB hat gesagt.:


> dann passe wenigstens noch die Fehlermeldung an:
> > System.out.println("Das Array ist nicht rechteckig!");
> 
> ein Array ist quasi immer rechteckig, alles andere ließe sich aus einem einfachen Vergleich gar nicht feststellen,
> ...




Ja ich weiss, dass diente praktisch erst einmal als Platzhalter.

Ich bin mir sogar sicher, dass nicht quadratische auch funktionieren sollen.

Ich überlege gerade, was ich in diesem Fall anders machen muss.


----------



## tfa (24. Mai 2011)

> Ich bin mir sogar sicher, dass nicht quadratische auch funktionieren sollen.
> 
> Ich überlege gerade, was ich in diesem Fall anders machen muss.



Steht auch alles im Wiki-Artikel...


----------



## ToBe4minimal (24. Mai 2011)

tfa hat gesagt.:


> Steht auch alles im Wiki-Artikel...



Dann lese ich da jetzt nach.


DANKE LEUTE!!


----------

