Vektor in Matrix umwandeln < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 10:22 Fr 01.07.2011 | Autor: | danm357 |
Liebe Forengemeinde,
ich habe ein kleines Problem bei dem Ihr mir hoffentlich weiterhelfen könnt.
Ich habe einen Vektor v1 mit 4194304 (= 2048 x 2048) Einträgen. Diesen Vektor müsste ich nun in eine Matrix der Grösse 2048 x 2048 umwandeln. Die ersten 2048 Einträge des Vektors sollen also die erste Spalte in der Matrix sein, die nächsten 2048 Einträge des Vektors sollen dann die zweite Spalte in der Matrix sein etc.
Nun habe ich herausgefunden, dass man in Mathematica mit
ersteSpalte=v1[mm][[1;;2048;;1]] [/mm]
zweiteSpalte=v1[mm][[2049;;4096;;1]] [/mm] etc.
die passenden Zeilen des Vektors extrahieren kann.
Aber leider scheitere ich nun an meinen bescheidenen Programmierkünsten. Wie schaffe ich es nun (in Mathematica), dass ich die passenden Zeilen des Vektors automatisch extrahiere und in eine Matrix fülle?
Ich würde mich über jede kleine Hilfestellung freuen!
|
|
|
|
Hallo danm357,
ich weiß nicht, welche Software du verwendest, aber es geht Dir wohl nur um den Weg, wenn ich es recht sehe.
Es gibt also ein eindimensionales Array V(n), den Vektor. Und den willst Du transformieren in ein zweidimensionales Array M(m,n), die Matrix.
In Pseudocode ginge das z.B. so. Ich gehe davon aus, dass V(n) und M(m,n) bereits definiert sind und die Daten im Vektor vorliegen.
for i=1 to 2048
for j=1 to 2048
M(i,j):=V(2048*(i-1)+j)
end loop (j)
end loop (i)
So schreibst Du einfach jede einzelne Zahl aus dem Vektor an die entsprechende Stelle der Matrix, hier allerdings zeilenweise. Wenn Du spaltenweise schreiben willst, gehört in die mittlere Zeile M(j,i), und der ganze Rest bleibt so.
Hilft Dir das weiter?
Grüße
reverend
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:41 Fr 01.07.2011 | Autor: | danm357 |
Hallo,
vielen lieben Dank für diesen Lösungsansatz.
Vom Pseudocode her ist es mir klar, wie es gehen sollte.
Jetzt muss ich es nur noch schaffen, das ganze in Mathematica-Code (sorry, habe ich in der ursprünglichen Version des Artikels vergessen zu erwähnen) umzuwandeln.
Mal schauen, ob ich das schaffe...
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:02 Fr 01.07.2011 | Autor: | reverend |
Hallo nochmal,
> vielen lieben Dank für diesen Lösungsansatz.
> Vom Pseudocode her ist es mir klar, wie es gehen sollte.
> Jetzt muss ich es nur noch schaffen, das ganze in
> Mathematica-Code (sorry, habe ich in der ursprünglichen
> Version des Artikels vergessen zu erwähnen) umzuwandeln.
> Mal schauen, ob ich das schaffe...
Wenns nicht klappt, melde dich nochmal (am besten aber mit einem Frageartikel, der bleibt länger angezeigt ).
Ich habe selbst gar keine Ahnung von Mathematica, aber wir haben hier ein paar Spezialisten, die selbst viel mit dem Programm arbeiten.
Wenn das nicht so teuer wäre, würde ich das wohl auch gern...
Viel Erfolg!
reverend
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:07 Fr 01.07.2011 | Autor: | danm357 |
So geschafft, ist gar nicht so schwer mit Mathematica.
Wenn die Matrix und der Vektor schon vorliegen, schaut Deine Lösung in Mathematica folgendermassen aus:
[mm] For[i=1,i<2049,i++,For[j=1,j<2049,j++,Matrix[[i,j]]=v1[[2048*(i-1)+j]]]] [/mm]
Vielen Dank noch mal für die schnelle und nützliche Hilfe!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:48 Fr 01.07.2011 | Autor: | reverend |
Hallo,
> So geschafft, ist gar nicht so schwer mit Mathematica.
> Wenn die Matrix und der Vektor schon vorliegen, schaut
> Deine Lösung in Mathematica folgendermassen aus:
> [mm]For[i=1,i<2049,i++,For[j=1,j<2049,j++,Matrix[[i,j]]=v1[[2048*(i-1)+j]]]][/mm]
Interessante Syntax.
> Vielen Dank noch mal für die schnelle und nützliche
> Hilfe!
Gern geschehen.
lg
rev
|
|
|
|