Laden...

matrix transponieren!

Erstellt von sharpy911 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.291 Views
S
sharpy911 Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren
matrix transponieren!

hallo,

hab eine matrix vom folgenden typ:
List<double?[]> arrUser = new List<double?[]>();

von dieser matrix möchte ich die transponierte haben, das wollte ich mit folgender schleife machen

for (int i = 0; i < arrUser.Count; i++)
            {
                for (int j = 0; j < arrUser[0].Length; j++)
                {
                    arrUser2[j][i] = arrUser[i][j];
                }
            }

arrUser2 gibt mir aber eine out of range exception, da ja die grösse nich festgelegt ist. wie könnte ich bei der deklaration von arrUser2 die richtige grösse festlegen?

314 Beiträge seit 2007
vor 13 Jahren

Versuchs mal so, ungetestet!


for (int i = 0; i < arrUser.Count; i++) {
   
      for (int j = i + 1; j < arrUser.Count; j++)
     {
         int tmp = arrUser[i][j];
         arrUser[i][j] = arrUser[j][i];
         arrUser[j][i] = tmp;
     }
}

S
sharpy911 Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

fast, nur die letzte spalte müsste noch eine neue zeile ergeben

314 Beiträge seit 2007
vor 13 Jahren

Heisst?

S
sharpy911 Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

naja z.b. aus:

5 5 4
2 2 1

wird

5 2 4
5 2 1

anstatt
5 2
5 2
4 1

S
82 Beiträge seit 2008
vor 13 Jahren

Weil der oben besagte Code nun mal nur für symmetrische Matritzen funktioniert...

314 Beiträge seit 2007
vor 13 Jahren

Das ist korrekt, hätte ich dazu sagen sollen.

S
sharpy911 Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

for (int j = 0; j < arrUser[0].Length; j++)
{
     user2 = new double?[arrUser.Count];
     arrUser2.Add(user2);
}
for (int j = 0; j < arrUser[0].Length; j++)
{
     for (int i = 0; i < arrUser.Count; i++)
     {
            arrUser2[j][i] = arrUser[i][j];
     }
}

hab es jetzt so gelöst, kann mir jemand erklären warum die zeile
user2 = new double?[arrUser.Count];
innerhalb der for schleife sein muss, weil wenn diese ausserhalb ist werden nicht die korrekten werte zugewiesen.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo sharpy911,

das ist doch offensichtlich: Weil du für jede Zeile ein eigenes Array brauchst, um die Werte der Zeile aufzunehmen. Wenn das nun nicht gerade ein Fall von "Brett vom Kopf" ist, dann ist es ein Fall von [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

S
sharpy911 Themenstarter:in
11 Beiträge seit 2009
vor 13 Jahren

hab ich wohl grad n brett vorm kopp

also warum kann ich nicht einfach denselben array öfters adden? die erste for schleife soll ja nur die dimension von arruser2 festlegen, die wertezuweisung erfolgt in der zweiten for schleife

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo sharpy911,

also warum kann ich nicht einfach denselben array öfters adden?

eben deshalb.

Bitte schau dir das (mit den Referenztypen) bitte nochmal in einem C# Buch an.

herbivore