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

Alle Einträge einer Matrix formatieren mit sprintf

 

TommyLeeJones
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2015, 12:59     Titel: Alle Einträge einer Matrix formatieren mit sprintf
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem, ich habe einen Vektor A
Code:
A=[0,5500,5600,5700]


Ich hätte nun gern, dass alle Einträge der Matrix vierstellig angezeigt werden, das versuche ich über sprintf

Mein bisheriger Versuch:
Code:
temp=sprintf('%04.4g \n %04.4g \n %04.4g \n %04.4g', A);


Jetzt schreibt mir MATLAB alle Einträge in eine Zeile, ich hätte gerne folgende Form:
Code:
B=[0000, 5500, 5600, 5700]


Hat jemand einen Tipp für mich?

Schon mal vielen Dank für eure Hilfe,
Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 02.01.2015, 16:16     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Bist du dir im Klaren, dass hier Zahlenwerte in Strings umgewandelt werden?

Code:
A = [0,5500,5600,5700];
B = sprintf('%04.4g, %04.4g, %04.4g, %04.4g', A);


Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
TommyLeeJones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2015, 00:50     Titel:
  Antworten mit Zitat      
Mhm ja, doch schon, aber die kann ich mit Hilfe von str2num wieder in Zahlenwerte umwandeln oder?
Könnte mein Ansatz zielführend sein oder gibts noch eine andere Möglichkeit die Einträge des Vektors vierstellig darzustellen?

Danke
Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 03.01.2015, 07:22     Titel:
  Antworten mit Zitat      
Moin,

TommyLeeJones hat Folgendes geschrieben:
Mhm ja, doch schon, aber die kann ich mit Hilfe von str2num wieder in Zahlenwerte umwandeln oder?

Schon, oder mit str2double. Ich vermute, du möchtest das vierstellige Format zu Darstellungszwecken nutzen, nicht um Berechnungen auszuführen? Dann könntest du B zur Darstellung nutzen und A für weitere Berechnungen.

TommyLeeJones hat Folgendes geschrieben:
Könnte mein Ansatz zielführend sein oder gibts noch eine andere Möglichkeit die Einträge des Vektors vierstellig darzustellen?

Ob zielführend, hängt davon ab was du mit den Werten vorhast, das hast du noch nicht verraten Wink
Eine andere Möglichkeit könnte vielleicht
Code:
sein, hab jetzt keine Zeit das selber nachzulesen, überlass ich dir.

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
TommyLeeJones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2015, 18:35     Titel:
  Antworten mit Zitat      
Von Hand hab ich eine Lösung generiert:
Code:
A=[0;5500;5600;5700];
temp1=[sprintf('%04.4g', A(1,1))];
temp2=[sprintf('%04.4g', A(2,1))];
temp3=[sprintf('%04.4g', A(3,1))];
temp4=[sprintf('%04.4g', A(4,1))];

C=cat(1,temp1,temp2,temp3,temp4);


So sollts aussehen, da ich aber mehrere tausend Einträge habe, wollt ich das Ganze automatisieren, ich hab mir das so gedacht:

Code:
x = zeros(4,1);
for i = 1:4
   x(i) = [sprintf('%04.4g', A(i,1))];
end

C=cat(1,x1:end);


dann erscheint leider folgende Fehlermeldung:
Code:
In an assignment  A(:) = B, the number of elements in A and B must be the same.


Mit welchem Befehl kann ich diese Vektoren x(i) erzeugen, damit ich diese mit dem Befehl cat zusammenfügen kann?



Zitat:
Ob zielführend, hängt davon ab was du mit den Werten vorhast, das hast du noch nicht verraten

Hintergrund ist folgender:
Ich habe Datumsangaben in der Form 'yy', 'mm', ... bis zu Tausendstel Sekunden 'FFFF' gegeben, wobei die Tausendstel Sekunden nicht immer 4stellig sind, sondern die Null einstellig als '0' dargstellt wird.

Ich will diese einzelnen Bausteine nun in die Form 'yymmddHHMMSSFFF' bringen, wobei ich die Bausteine zuerst in Strings umwandle, um sie dann mit 'strcat' zusammenzufügen, das hat soweit geklappt, nur bei den Einträgen der einstelligen Null bekomme ich nichts passendes zurück, weshalb ich die Null gern in der Form '0000' in der Ausgangsvariablen stehen hätte.

Ich hoffe, ich habe das einigermaßen verständlich beschrieben Embarassed

Vielen Dank,
Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 03.01.2015, 19:38     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Ja, gut beschrieben =)

In der Schleife erzeugst du Daten vom Typ char, du prealloziierst (ist das ein Wort? Very Happy) x als double.
Die Fehlermeldung erscheint, weil x(i) nur auf das erste Element von x zugreift, du aber je Schleifendurchlauf vier Elemente hinein schreiben willst. Mit x(i,: ) greift man auf alle Spaltenelemente der Zeile i zu.

So funktioniert es:
Code:
A=[0;5500;5600;5700];
len = length(A);
x = repmat(char(0),len,4);
for i = 1:len
    x(i,:) = sprintf('%04.4g', A(i,1));
end
% C = x;


Was möchtest du mit den Werten der Form 'yymmddHHMMSSFFF' anschließend machen? Zum "Rechnen" mit Datumsangaben bietet sich
Code:
an, schau bei Bedarf mal in diesen Thread rein.

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
TommyLeeJones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2015, 19:29     Titel:
  Antworten mit Zitat      
Hallo Seban,

vielen, vielen Dank, dein Code funktioniert wunderbar, so hab ich mir das vorgestellt!!

Eine letzte Frage:
Ich habe einen Vektor der Form
Code:
A=[0;0.5500;0.5600;0.5700]
und würde daraus gern die Nachkommastellen extrahieren, damit A dann folgendermaßen aussieht:
Code:
A=[0000;5500;5600;5700]

Habe versucht, das wieder über sprintf zu lösen und diverse Möglichkeiten durchgespielt, hab aber noch kein passendes Format gefunden, hättest du da noch abschließend einen Tipp?

Zitat:
Was möchtest du mit den Werten der Form 'yymmddHHMMSSFFF' anschließend machen?

Ich will zwei Datenreihen vergleichen, die mit unterschiedlichen Sensoren/Geräten aufgenommen wurden, und lege diese mit Hilfe der Datumsangaben übereinander, datenum kenn ich deshalb schon. Smile

Nochmals vielen Dank,
Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.01.2015, 20:19     Titel:
  Antworten mit Zitat      
Gern geschehen.

TommyLeeJones hat Folgendes geschrieben:

Eine letzte Frage:
Ich habe einen Vektor der Form
Code:
A=[0;0.5500;0.5600;0.5700]
und würde daraus gern die Nachkommastellen extrahieren

Wenn man den Wald vor lauter Bäumen nicht sieht... =)

Multipliziere A mit 1000, dann wie oben.

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
TommyLeeJones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2015, 12:17     Titel:
  Antworten mit Zitat      
An den Bäumen ist was dran Shocked

Funktioniert jetzt, allerdings mit Faktor 10000.
Vielen, vielen Dank!!

Nur aus Interesse, gäbe es eine Möglichkeit, die Nachkommastellen herauszulösen, also A=[1.3567;2.4678] zu B=[3567;4678] umzuschreiben?

Danke
Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 08.01.2015, 15:27     Titel:
  Antworten mit Zitat      
Hi Thomas,

Ich komme gerade, mit wenig Zeit, nur auf eine Lösung mittels Umweg über Strings. Quick and dirty funktioniert es bspw. so:
Code:
A = [1.3567;2.4678];
for ii = 1:size(A,1)
    hlp     = num2str(A(ii,1));
    hlp2    = regexprep(hlp, '(\d)*.(\d)*', '$2');
    B(ii,1) = str2double(hlp2);
end


Beste Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
TommyLeeJones
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2015, 14:28     Titel:
  Antworten mit Zitat      
OK, vielen, vielen Dank!

Grüße
Thomas
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 - 2025 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.