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

Von Bis umwandeln in Vektor

 

derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.11.2011, 13:47     Titel: Von Bis umwandeln in Vektor
  Antworten mit Zitat      
Hallo, habe hier ein Problem ich denke man kann es so herunterbrechen:

Ich habe einen Vektor mit Startwerten und einen mit Endwerten:
Code:

startv=[1,2]
endv=[4,6]
 


Jetzt würde ich gerne einen Vektor haben mit den Indizies der von, bis Werte also so etwas:
Code:

result=[1,2,4,5,6]
 


Mit for Schleife geht das natürlich, ist mir aber zu langsam. Kennt jemand eine gute Möglichkeit?

Vielen Dank,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.11.2011, 13:55     Titel:
  Antworten mit Zitat      
ich versteh die frage nicht wirklich. du willst so viele indizes haben wie in den start und entwerten agegeben oder willst du das die einträge im vektor den wert haben? also sowas ?
Code:
result=(startv(1):endv(2));
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 14:05     Titel:
  Antworten mit Zitat      
z.B:
Code:
result = [startv(1):startv(2) endv(1):endv(2)]
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 08.11.2011, 14:09     Titel:
  Antworten mit Zitat      
HI,

wenn man statt der 2 den Befehl
Code:
nimmt geht das ganze auch noch für Vektoren die mehr als zwei Einträge haben.

Code:
result = [startv(1):startv(end) endv(1):endv(end)]


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 14:16     Titel:
  Antworten mit Zitat      
Hi Phate,

das dachte ich zunächst auch, aber in diesem Fall macht ja ein Vektor mit mehr als zwei Einträgen keinen Sinn, da die Zwischenwerte nicht berücksichtigt würden.

mfg,
soad
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.11.2011, 14:37     Titel:
  Antworten mit Zitat      
Hallo,

dankeschön für die schnellen Antworten, und entschuldigt bitte die Verwirrung. Ich habe einen Fehler gemacht ich meinte:

Code:

startv=[1,4,10]
endv=[2,6,12]
 


Das Resultat bleibt das gleiche:


Code:
result=[1,2,4,5,6,10,11,12]


Zurzeit habe ich eine For Schleife dafür also etwas in der Art:

Code:

for k1=1:size(startv,2)
    k1
    loc_dv=(startv(k1)):endv(k1);
end
 


Meine Vektoren haben aber tausende von Einträgen und da ist das zu langsam.

Vielen Dank für eure Hilfe,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.11.2011, 14:52     Titel:
  Antworten mit Zitat      
hmm schonmal an ne recursive funktion gedacht ? ich weis aber nicht ob das dann schneller ist.
Code:
function [ v ] = test(k,startv,endv )
if k<=length(startv)
v=[startv(k):endv(k),test(k+1,startv,endv)];
else v=0;    
end
end
 

muss man die 0 am ende noch wegschneiden. hatte nich mehr zeit mir das zu überlegen ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 15:35     Titel:
  Antworten mit Zitat      
Das wäre auch eine Möglichkeit, weiss aber nicht, ob das performanter ist.
Code:
[b a] = ndgrid(1:max(endv),endv);
tmp = b.*(b<=a);
result = [tmp(tmp>=repmat(startv, [length(u) 1]))]'
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.11.2011, 16:59     Titel:
  Antworten mit Zitat      
Dankeschön für die Antworten,

ich habe mich jetzt für folgendes Entschieden:

Code:

tst2=arrayfun(@(x,z) x:z, startv, endv, 'Uniformoutput', false);
result=horzcat(tst2{:});
 


Viele liebe Grüße

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 17:08     Titel:
  Antworten mit Zitat      
Ist das wirklich schneller? Ich hatte mal gelesen arrayfun, sein eine for-Schleife mit zusätzlichem Overhead. Ist dem nicht mehr so?
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.11.2011, 17:23     Titel:
  Antworten mit Zitat      
Ja, es ist ca. 5 mal schneller. Aber warum genau kann ich dir auch nicht sagen. Ich habe das mit der For-Schleife auch gehört, allerdings ist es meistens trotzdem schneller.

Vielleicht kann dazu noch jemand was sagen?

Viele Grüße

der Oli
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.