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

"Platzhalter"

 

JohnnyCash
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 29.10.2009, 21:14     Titel: "Platzhalter"
  Antworten mit Zitat      
Hallo,

welchen "Platzhalter" muss ich benutzen um mir beim befehl fprintf Vektoren/Cells ausgeben zulassen?!

konkret also:
Code:

for i=1:length(Cell)
     fprintf('Cell %g: %?', i, Cell{i})
end
 

was muss anstelle des ?-Zeichen stehen?

Grüße
Johannes
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

das kommt auf den Inhalt des Cell Arrays an. Ich denke nicht, dass es da eine Allzwecklösung gibt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 29.10.2009, 23:01     Titel:
  Antworten mit Zitat      
naja du musst dir vorstellen das der cell array mehrere vektoren enthält.

ich habe ein heuristisches tourenverfahren in matlab implementiert. nach dem erstllen der touren ist der cell array mit den touren "gefüllt".

nun möchte ich mir alle touren ausgeben lassen, also:

Cell{1}: [1 2 4 7]
Cell{2}: [3 5 6]
...

die einzelnen elmente der "Cell-Array-Vektoren" sind die anzufahrenden Kunden.

Bloß weiß ich einfach nich wie ich die cell ausgeben kann Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 30.10.2009, 20:40     Titel:
  Antworten mit Zitat      
hmm weiß wirklich keiner wie ich mir nen cell array mit fprintf ausgeben lassen kann?! Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 30.10.2009, 23:37     Titel:
  Antworten mit Zitat      
Hallo Johnny,

ich glaube das Harald da recht hat und es keine universal Lösung gibt, bzw. diese nicht ohne Schleifen auskommt.
Wenn es von der Performance in Ordnung ist, benutze doch einfach cell2csv
http://www.mathworks.com/matlabcentral/fileexchange/7601-cell2csv

Viele Grüße und schönes WE
Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2009, 08:36     Titel:
  Antworten mit Zitat      
Hmmm... ich habe keine Idee, von der ich wirklich überzeugt bin, aber es sollte zumindest funktionieren:

Code:
len = cellfun(@length, Cell);
fid = fopen('data.txt', 'wt');
for I = 1:length(len)
    fprintf(fid, [repmat('%f \t', 1, len(I)) '\n'], Cell{I})
end
fclose(fid)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 31.10.2009, 14:59     Titel:
  Antworten mit Zitat      
hey!

hat leider nicht geholfen Sad...jetzt gibt mir matlab nicht den "tourvektor" aus sondern nur eine Zahl, von der ich nicht mal verstehe wie sie gebildet wird?!

in meinem Tourenbeispiel sieht die Cell so aus:
Zitat:

Tour{1} = 2 1 6 8
Tour{2} = 4 5 7

wenn ich nun dein Code benutze, Harald, wird mir folgendes ausgegeben
Zitat:

Tour =

[1x4 double] [1x2 double]


ans =

41


ans =

31


ans =

0

bringt also nich wirklich was, komisch auch, dass ausgegeben wird:
Zitat:

Tour =

[1x4 double] [1x2 double]

müsste ja eigntlich:
Zitat:

Tour =

[1x4 double] [1x3 double]

sein...?!


maaan...da kommt man sogut klar mit der implementierung in matlab und dann scheitert es an der ausgabe der ergebnisse, das kann doch nich sso schwer sein Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2009, 15:17     Titel:
  Antworten mit Zitat      
Hallo,

zunächst ist mal die Frage:
geht es um die Ausgabe in eine Datei, oder die Ausgabe ins Command Window?
Zusätzlich fehlen mir in deinem Code eckige Klammern [] zur Erstellung des Arrays.

Also nochmal.
Ins Command Window:

Code:
Tour{1} = [2 1 6 8];
Tour{2} = [4 5 7];

Cell = Tour;
len = cellfun(@length, Cell);
%fid = fopen('data.txt', 'wt');
for I = 1:length(len)
    fprintf([repmat('%f \t', 1, len(I)) '\n'], Cell{I});
end
%fclose(fid);


In Datei data.txt:

Code:
Tour{1} = [2 1 6 8];
Tour{2} = [4 5 7];

Cell = Tour;
len = cellfun(@length, Cell);
fid = fopen('data.txt', 'wt');
for I = 1:length(len)
    fprintf(fid, [repmat('%f \t', 1, len(I)) '\n'], Cell{I});
end
fclose(fid);


Das funktioniert bei mir einwandfrei. Es ist lediglich die Frage, ob das die effizienteste Implementierung ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 31.10.2009, 15:53     Titel:
  Antworten mit Zitat      
hallo!

danke für deine schnelle Hilfe! Also die Ausgabe im Command Window reicht vollkommen aus!
Die []-Klammern haben im meinen beispiel nur gefehlt weil dies die Ausgabe nur darstellen sollte, wie sie im Command Window sein soll.

Ob die Implementierung die Optimale ist, glaub ich selbst nich unbedingt.
Fakt ist dass als Ergebniss der Implementierung zwei Cell Arrays erstellt werden.

Cell Array 1: Ist der TourenArray, der eine bestimmte Anzahl von Touren enthält. die Touren werden als Vektor im Array gespeichert.

Cell Array2: Ist die Auslastung der jeweiligen Tour.

Dein Code funktioniert doch, irgendwie muss ich wohl einen Fehler gemacht haben.

Aber die Anzeige an sich gefällt mir noch nicht so ganz:

Zitat:
Tour =

[1x4 double] [1x2 double]

2 1 6 8
4 5 7


Ich hatte mir die Ausgabe halt so vorgestellt:

Zitat:
Tour 1: 2 1 6 8
Tour 2: 4 5 7


Ich weiß ich neige dazu schlecht erklären zukönnen....

Dein Code gefällt mir schon sehr: Bloß wie bekomm ich noch das "Tour x" davor?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2009, 16:08     Titel:
  Antworten mit Zitat      
Hallo nochmal,

Code:
Tour{1} = [2 1 6 8];
Tour{2} = [4 5 7];

Cell = Tour;
len = cellfun(@length, Cell);
for I = 1:length(len)
    fprintf(['%s' repmat('%f \t', 1, len(I)) '\n'], ['Tour ' num2str(I) ': '], Cell{I});
end


So recht? Ansonsten ruhig auch selbst mal ein wenig rumprobieren. MATLAB beisst ja nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 31.10.2009, 16:12     Titel:
  Antworten mit Zitat      
Very Happy genauso...Danke!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnnyCash
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 22.07.09
Wohnort: ---
Version: 2009b
     Beitrag Verfasst am: 15.10.2010, 14:53     Titel:
  Antworten mit Zitat      
Hallo!

Und zwar folgendes, hab seit langem mal wieder das Skript benutzen wollen. Nun gibt mir Matlab komischerweise einen Fehler aus, obwol ich das Skript wie es Harald in seinem letzten Post geschrieben hat, genutzt habe.

Zitat:

??? Function name must be a string.

Error in ==> versuch at 103
len = cellfun(@length, Cell);


Ich habe aber mittlerweile eine andere Matlabversion als damals. Momentan nutze ich Matlab 7.0 damals war es irgendetwas mit 2008a oder so. Liegt der Fehler daran?

MfG
Johnny
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

7.0 ist eine deutlich ältere Version als 2008a. Ich werde jetzt nicht darüber spekulieren, was jemanden dazu bringt, diesen Wechsel vorzunehmen...

Damals gab es wohl noch keine Function Handles. Stattdessen probier mal:
Code:
len = cellfun('length', Cell);


Grüße,
Harald
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.