|
|
Vektor: Zahlen ersetzen abhängig von vorgängiger Zahl |
|
liso |

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 12.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2014, 18:21
Titel: Vektor: Zahlen ersetzen abhängig von vorgängiger Zahl
|
 |
Hallo Alle
Ich habe folgende Frage:
Ich habe einen Vektor (see input example). Der Vektor besteht aus den Zahlen 0, 1, 2, 3, 4.
Nach jeder Zahl 1, 2, 3, 4 möchte ich die Zahl 0 in jeweils vier Zellen mit der gleichen vorgängigen Zahl ersetzen.
Wie würdet Ihr das schreiben?
Vielen Dank im Voraus.
Lisa
Beschreibung: |
|
 Download |
Dateiname: |
output_example.txt |
Dateigröße: |
348 Bytes |
Heruntergeladen: |
269 mal |
Beschreibung: |
|
 Download |
Dateiname: |
input_example.txt |
Dateigröße: |
348 Bytes |
Heruntergeladen: |
280 mal |
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.07.2014, 17:34
Titel: Re: Vektor: Zahlen ersetzen abhängig von vorgängiger Zahl
|
 |
Hallo Lisa,
Zitat: |
Ich habe einen Vektor (see input example). |
Das Text-file ist keine gute Wahl das Problem zu erklären. Du schreibst von "Zellen". Heißt das, dass die Zahlen in einem Cell-Array stehen? Oder sind das Vektoren von Typ DOUBLE?
Zitat: |
Nach jeder Zahl 1, 2, 3, 4 möchte ich die Zahl 0 in jeweils vier Zellen mit der gleichen vorgängigen Zahl ersetzen. |
Das verstehe ich nicht. Bitte gib ein kurzes Beispiel, das eindeutig den gewünschten Vorgang definiert.
Wie wäre es mit einer einfachen FOR-Schleife, die über alle Elemente geht?
Zeige doch mal, was Du bisher versucht hast.
Gruß, Jan
|
|
|
liso |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 12.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 00:22
Titel:
|
 |
Hallo Jan
Danke für Deine Nachricht.
Entschuldige meine Ausdrucksweise, ich bin die Matlab Sprache noch nicht gewöhnt.
Es handelt sich um einen Vektor vom Typ Double. Ersetzt werden soll eine beliebige Anzahl von Nullen (z.B. 3, 4, 5 oder....) mit der jeweils vorangehenden Zahl.
Hier nochmals ein Bespiel:
%input
x = [0;0;0;1;0;0;0;0;0;0;2;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;]
%output
y = [0;0;0;1;1;1;1;0;0;0;2;2;2;2;0;0;0;1;1;1;1;0;0;0;0;0;3;3;3;3;0;0;0;0;4;4;4;4;0;0;0;0;0;2;2;2;2;0;0;0;0;]
Ich hoffe, dies its besser verständlich.
Danke nochmals für einen Vorschlag.
Gruss
Lisa
|
|
|
liso |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 12.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 09:48
Titel:
|
 |
Hallo Jan
Folge Lösung habe ich in einem anderen Beitrag gefunden, was meinem Problem schon etwas nahe kommt. Hier werden ALLE Nullen ersetzt mit der vorangehenden Zahl.
- Was hier noch fehlt ist die Angabe der ANZAHL der Nullen die ersetzt werden sollen.
- Ferner funktioniert es nicht, wenn am Anfang eine Null steht.
Gibt es hierzu eine Lösung?
Danke und Gruss
Lisa
X = [1,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,]
%%
if X(1)==0
error('invalid data');
end
Ind=find(X==0);
for k=Ind
X(k)=X(k-1);
end
%%
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 09:54
Titel:
|
 |
Hallo,
eine Möglichkeit:
Grüße,
Harald
|
|
|
liso |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 12.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 10:08
Titel:
|
 |
Danke, merci vielmals!
Lisa
|
|
|
liso |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 12.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 13:17
Titel:
|
 |
Hallo Harald
Danke nochmals, Deine Lösung läuft gut.
Es gibt Fälle in welchen zwei gleiche Zahlen eng benachbart sind:
Hier ein Beispiel:
X = [0,0,0,1,0,0,0,0,0,0,2,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,0,4,0,0,0,0,0,0,2,0,0,0,0,0,0,0,]
In einem solchen Fall würde ich gerne die erste der gleichen Zahlen ignorieren und nur die zweite entsprechend behandeln.
Wie könnte man Deinen Code entsprechend anpassen?
Danke
Lisa
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 17:35
Titel:
|
 |
Hallo,
bitte "nah beieinander" konkretisieren.
Eine Möglichkeit wäre:
Grüße,
Harald
|
|
|
liso |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 39
|
 |
|
 |
Anmeldedatum: 12.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2014, 18:42
Titel:
|
 |
Hallo
Mit 'nah beinander' meine ich, dass der Abstand zwischen den beiden Zahlen kleiner als das gewählte Intervall, i.e. 3, ist.
Danke für Deinen Vorschlag, der passt!
herzlichen Dank
Lisa
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|