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

Bestimmte Einträge aus einem Vektor löschen

 

psigh
Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 17:30     Titel: Bestimmte Einträge aus einem Vektor löschen
  Antworten mit Zitat      
Hallo Leute. Ich bin Matlab-Anfänger und habe ein Problem

Mein Vektor sieht ungefähr so aus [0,1,1,1,0,0,0,0,2,2,2,0,0,1]

Ich möchte, dass aus einer Folge aus einsen oder zweien immer nur die erste Nummer stehenbleibt und die anderen Einträge Null werden.


Er soll also am Ende so aussehen [0,1,0,0,0,0,0,0,2,0,0,0,0,1]

Ist bestimmt einfach, aber leider komme ich trotzdem nicht drauf.


Vielen Dank,

Dominik
Private Nachricht senden Benutzer-Profile anzeigen


Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 05.08.2010, 17:56     Titel:
  Antworten mit Zitat      
Hi,

so
Code:

vec =  [0,1,1,1,0,0,0,0,2,2,2,0,0,1] ;
begin = find(diff(vec)>0)+1;
NullVec = zeros(1,length(vec));
NullVec(1,begin) = vec(1,begin); % das ist dein Ergebnis
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 18:07     Titel:
  Antworten mit Zitat      
Vielen Dank für Deine Antwort.


Könntest Du mir das vielleicht kurz erklären?




Vielen Dank,

Dominik
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 05.08.2010, 18:14     Titel:
  Antworten mit Zitat      
Hi,

klar doch Wink
Der erste Befehl "diff" macht folgendes
[vec(2)-vec(1) vec(3)-vec(2) ....] hintereinander folgende gleiche Werte löschen sich somit aus.
Mit dem Befehl "find" finden wir die gesuchten Indices, aber da sie aufgrund von "diff", um eine Stelle nach vor gerutscht sind schieben wir sie einfach mit +1 an ihre eigentlichen Stellen.
Und der Reste ist einfach Matrixoperation in Matlab.

Gruß,
Vito

PS: wenn net kapisch nochmal melden Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 18:55     Titel:
  Antworten mit Zitat      
Vielen Dank,

ich versuche gerade, dass mit einer Matrix zu machen. Aber irgendwie stimmen die Dimensionen nicht

Code:

nullmat=zeros(zeilen,spalten);
for j=1:Spalten

   
E=find(diff(D(:,spalten))>0)+1;
nullmat(spalten,E)=D(spalten,E);
end




D ist die Matrix, mit der ich dich Sache von eben durchführen möchte. Ich mache es aber Spalte für Spalte.

Müsste doch aber eigentlich so klappen, oder?[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:08     Titel:
  Antworten mit Zitat      
Hi,

ich glaube, dass du Spalte und Zeile verwechselt hast.
Aber egal poste mal deine Matrix, dann sehen wir weiter.

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:08     Titel:
  Antworten mit Zitat      
Ach ich bin ja blöd (-:

Hatte Zeilen und Spalten vertauscht.

Noch eine Frage hääte ich. Hast Du eine Idee, wie man alle Einträge zwischen der ersten eins und der folgenden zwei zu Nullen machen könnte?


So das aus so einem Vektor:

[0,1,1,1,0,0,0,0,2,2,2,0,0,1,0,0,0,0,1,0,0,2,2,2,2]

so ein Vektor wird

[0,1,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0]

Denn ich brauche die zwischen zwei VERSCHIEDENEN Einträgen liegenden Zahlen nicht.




Also entschuldige bitte, falls die Fragerei Nerven sollte.



Vielen Dank nochmals,

Dominik
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:12     Titel:
  Antworten mit Zitat      
Hi,

Erstens die Fragerei nervt nicht, denn der Forum dazu gemacht worden.
Zweitens
Schau dir meinen ersten Code an, damit solltst du es lösen können.

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:15     Titel:
  Antworten mit Zitat      
Hi:)

Wenn ich das richtig verstanden habe, willst du die Operation nicht mit einem Vektor sondern mit einer Matrix durchführen. Habe den Code von Vito hier übernommen:)
versuch immer möglichst ohne Schleifen zu arbeiten. Hier ist ein Beispiel mit einer Matrix mit Reihen von 1en und 2en:



Code:

%Erstellen der Bespielmatrix
Mpart1 =  [0,1,1,1,0,0,0,0,2,2,2,0,0,1]' ;
Mpart2 =  [0,0,1,1,0,0,0,2,2,2,2,0,1,1]' ;
Mat = zeros(14,2);
Mat(:,1) = Mpart1;
Mat(:,2) = Mpart2;
% Umwandlung der Matrix in Vektor
vec = reshape(Mat,[],1);

begin = find(diff(vec)>0)+1;
NullVec = zeros(length(vec),1);
NullVec(begin,1) = vec(begin,1);
% Umwandlung zurück in Matrix

NullMat = reshape(NullVec,14,[]);
 


Die Matrix wird zu Vektor umgewandelt, dann werden die ersten 1en und 2en gefunden und dann wird der resultierende Vektor wieder in eine Matrix umgewandelt.

Gruß,
Lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:18     Titel:
  Antworten mit Zitat      
Genau das ist mein Problem. Ich schreibe gerade meine Diplomarbeit und hab mir ein Thema ausgedacht. Programmieren sollte man eigentlich in R, aber ich darfs auch in Matlab machen, weil ich mich da ETWAS besser auskenne. Aber auch nicht gut. Programmiert habe ich auch schon einiges und alles besteht aus Schleifen. Mein Rechner dampft (-:

Ausserdem stoße ich auch mittlerweile ganz heftog an meine Grenzen. Den Algorithmus, denn ich programmieren will, kann ich wahrscheinlich gar nicht umsetzten
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:23     Titel:
  Antworten mit Zitat      
Hi,

immer wenn du nicht weiterkommst einfach den Code hier reinstellen und
das Forum wird dich schon helfen. Laughing
Und nochwas wenn dein Thread beantwortet ist dann auf beanwortet umschalten.


Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:26     Titel:
  Antworten mit Zitat      
Ich würde ja auch gerne Fragen stellen. Aber ich muss ja erstmal ein Pamphlet verfassen in dem ich erkläre, was ich überhaupt machen will. Das hab ich mich bis jetzt noch nicht getraut. Solle ich aber vielleicht mal machen.
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 05.08.2010, 19:33     Titel:
  Antworten mit Zitat      
Ja, genau...Schleifen dauern in der Regel lange. Das ist eben der Vorteil von MATLAB dass es Matrizen kennt:)

P.S. Wir brauchen mehr Leute wie Vito hier..dann wirst du glaube ich keine Probleme mit der Diplomarbeit haben....Smile
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.