WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Kopieren von Werten

 

patrick.pat
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 22.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2017, 20:02     Titel: Kopieren von Werten
  Antworten mit Zitat      
Gegeben ist folgende Matrix:

1 2 3 4 5 6
2 3 4 5 6 7
8 9 1 2 3 4

Möchte am Ende folgende Matrix als Ergebnis haben. Die zweite Zeile wird immer an die erste Zeile eingefügt.


1 2 3 4 5 6 2 3 4 5 6 7 8 9 1 2 3 4
2 3 4 5 6 7 8 9 1 2 3 4 0 0 0 0 0 0
8 9 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0 0

Wäre dankbar für eine Lösung bzw. Ansätze.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.09.2017, 22:13     Titel:
  Antworten mit Zitat      
Hallo,

was hast du denn versucht, und welche Probleme sind dabei aufgetreten?
Im Zweifelsfall mit zeros vorbelegen und dann mit einer for-Schleife befüllen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
patrick.pat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 22.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2017, 22:30     Titel:
  Antworten mit Zitat      
Das ist natürlich nur ein Beispiel. Habe am Anfang eine Matrix von 4500 x 1. Am Ende habe ich eine Matrix von 4500 x 4500.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.09.2017, 22:34     Titel:
  Antworten mit Zitat      
Hallo patrick.pat,

Das Beispiel unterscheidet sich doch von dem aus der ersten Frage. Was ist nun genau variabel an dem Problem?

Eine Matrix mit der entgültigen Größe zu erstellen und per Schleife die Teil-Vektoren hineinzukopieren ist nicht so schwierig. Es sind 3 Zeilen Code. Versuche es mal und stelle dan eine konkrete Frage, falls es nicht klappt. Poste dann den bisherigen Code.

Du siehst, Harald und ich zögern die Lösung zu posten, weil es sich wie eine Hausaufgabe anhört.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
patrick.pat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 22.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2017, 11:14     Titel:
  Antworten mit Zitat      
Hi

Ich dachte erstmal die Endmatrix mit Nullen zu belegen


Code:

C = zeros(num_size, num_size);
for i=1:num_size
    A(i,:) = value(i,:);
end


Die zweite Spalte bis zum Ende der Matrix:
Problem: B muss am Ende mit Nullen befüllt werden, sonst stimmen die Dimensionen nicht.
Code:
B = value(2:end,:);


Und dann horizontal konkatenieren
Code:


Das natürlich muss dann iterativ erfolgen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.09.2017, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

es ist hier wichtig, ob das ganze nun auf Matrizen oder, wie du später schreibst, auf Vektoren angewendet werden soll. Bei Vektoren ist es deutlich einfacher.

Dein Code kopiert momentan nur zeilenweise ohne irgendetwas zu verändern.

Zitat:
Problem: B muss am Ende mit Nullen befüllt werden, sonst stimmen die Dimensionen nicht.

Dann mach das doch mit zeros ?

Es scheint, dass du alle Schritte hast und sie nur noch hättest kombinieren müssen.

Hier ein Ansatz für Matrizen:
Code:
M2 = cell(1, size(M,1));
for k = 1:size(M,1)
    M2{k} = [M(1:end-k+1,:); zeros(k-1, size(M,2))];
end
M2 = cell2mat(M2)

Wenn es nur um Vektoren geht, kann man das auch ohne Cells als Zwischenstufe lösen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
patrick.pat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 22.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2017, 11:48     Titel:
  Antworten mit Zitat      
Vielen Dank. Super. Habe es für mich angepasst.

Code:
M2 = cell(1, size(M,1));
for k = 1:size(M,1)
    M2{k} = [M(k:end,:); zeros(k-1, size(M,2))];
end
M2= cell2mat(M2)


Zuletzt bearbeitet von patrick.pat am 20.09.2017, 12:02, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
patrick.pat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 22.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2017, 12:01     Titel:
  Antworten mit Zitat      
Habe nur Problem wegen cell2mat wegen Speicherprobleme. Error using cat Out of memory. Type HELP MEMORY
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.09.2017, 12:33     Titel:
  Antworten mit Zitat      
Hallo,

wie sieht denn der Aufruf aus, bei dem der Fehler kommt?
Insbesondere: welche Dimensionen hat dein M?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
patrick.pat
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 22.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2017, 15:23     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

wie sieht denn der Aufruf aus, bei dem der Fehler kommt?
Insbesondere: welche Dimensionen hat dein M?

Grüße,
Harald


Habe es mit horzcat lösen können. Vielen Dank nochmal für die Hilfe.

Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.