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

alternative Sequenz von mehreren Einsen und Nullen

 

mareif
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 17.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2014, 11:34     Titel: alternative Sequenz von mehreren Einsen und Nullen
  Antworten mit Zitat      
Hallo zusammen,

angenommen ich habe folgenden Vektor w=[w1,w2,w3,w4,...]. Nun würde ich gerne einen zweiten Vektor v erzeugen, mit folgenden Einträgen:
v=[w1 Einsen, w2 Nullen, w3 Einsen, w4 Nullen,...]
Hier ein Beispiel:
w=[2 4 2 6 1];
Dann sollte der zweite Vektor v wie folgt aussehen:
v=[1 1 0 0 0 0 1 1 0 0 0 0 0 0 1]

Hier ist mein code (bisher):
----------------------------------
Code:

w=[2 4 2 6 1];
v=false(sum(w),1);
for i=1:length(w)
    if rem(i,2)  % for even #
        if i==1
            v(i:w(i))=true(w(i),1);
        else
            v(sum(w(1:i-1))+1:sum(w(1:i)))=true(w(i),1);
        end
    elseif ~rem(i,2)  % for odd #
        v(sum(w(1:i-1))+1:sum(w(1:i)))=false(w(i),1);
    end
end
 


Der Code schein mir, v.a. für große Vektoren w bzw. mit großen Einträgen, nicht sehr effizient. Hat jemand eine Idee, wie ich das effizienter machen kann?
Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 17.09.2014, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

das ist ein Spezialfall des "runlength decodings". Ein sehr ausführliches Beispiel von Jan S. findest du hier: http://www.mathworks.com/matlabcent.....eexchange/41813-runlength

Die vektorisierte Version ist deutlich schneller als die Schleifenversion. Sollte das noch nicht schell genug sein, kannst du ja das mex-file benutzen.

Falls es damit nicht klappt, bitte deinen Versuch posten und gezielt das Problem schildern, dann kriegst du sicherlich mehr Hilfe.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
mareif
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 17.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2014, 20:59     Titel:
  Antworten mit Zitat      
Hallo Nras,

vielen Dank. Runlength decoding war mir neu. Der vektorisierte Code ist vollkommen ausreichend (bisher Wink). Hat alles geklappt!

Danke, Mareif
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.