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

3-Spalten Matrix: Entscheidungsregel aus Spalten 2 & 3 ?

 

JulianGlaab
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2015, 11:18     Titel: 3-Spalten Matrix: Entscheidungsregel aus Spalten 2 & 3 ?
  Antworten mit Zitat      
Hallo,
an manchen Stellen hänge ich in noch ein wenig an den Basics fest, vielleicht kann mir von euch jemand weiterhelfen:

Ich habe eine Matrix mit Bauteilen (als Nummern) (2. Spalte) und den jeweiligen Bearbeitungsvorgangsnummern (3. Spalte). Diese Vorgangsnummer des Bearbeitungsschritts bezieht sich nur auf die jeweilige Bauteil. Die Matrix ist nach Zeit sortiert und diese Reihenfolge soll beibehalten werden (angedeutet durch 1. Spalte)

Ich möchte für jede Zeile der Matrix herausfinden, ob es sich dabei um den letzten Bearbeitungsschritt des Bauteils handelt (also höchste Vorgangsnummer)

In einer neuen Spalte soll dieses Ergebnis dann als Attribut vermerkt werden (1=letzter Vorgang, 0=nicht letzter Vorgang)

Code:
% Sieht so aus:
A = [1, 100,     10,    
       2, 105,     10,    
       3, 102,     20,
       4, 100,     15,
       5, 120,     60,
       6, 100,     20,
       7, 105,     20
       8, 100,     30];

 


Ich hoffe, meine Frage verständlich formuliert zu haben und dass jemand eine Lösung parat hat.
Danke schonmal Smile
Private Nachricht senden Benutzer-Profile anzeigen


Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 12.06.2015, 16:21     Titel:
  Antworten mit Zitat      
Hi Julian,

so, wie ich das verstanden habe willst du sozusagen herausfinden wann eine Bauteilnummer als letztes in der zweiten Zeile steht. Weil, wenn z.b. 105 in der siebten Zeile das letzte mal steht, ist das auch der letzte Bearbeitungsschritt des Bauteils. Da die Matrix zeitlich geordnet ist muss dann in dieser letzten Zeile des Bauteils auch die höchste Bearbeitungsnummer stehen.

das sollte mit dem find befehl in der Art relativ einfach gehen:

Code:
x=find(A(:,2)==Bauteilnummer,'last');
A(x,4)=1;

Wenn du alle Bauteilnummern in einem Vektor abgespeichert hast kannst du das dann mit einer Schleife schnell durchlaufen lassen.
man kann bestimmt noch eine elegantere Methode finden, als eine Schleife, aber solange es nicht zu viele Bauteile sind sollte es ganz gut klappen.

vg Knygs
Private Nachricht senden Benutzer-Profile anzeigen
 
JulianGlaab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2015, 17:03     Titel:
  Antworten mit Zitat      
Hi Knygs,

danke für deine Antwort. Leider ist das Problem nicht ganz so einfach.
Die Anzahl an Vorgängen kann von Bauteil zu Bauteil differieren.
Insofern lässt sich eine Lösung nicht an einer bestimmten Zeile festmachen.

Ich hab mal einen Beispiel-Datensatz als Excel angehängt. Vielleicht wird es damit einfacher. Zufälligerweise sind die Materialnummern hier zumeist sortiert (aufsteigend anhand Ihres Vorgangs), das ist aber nicht der Regelfall.

Ich möchte in einer neuen Spalte für jedes Bauteil (Material) den jeweils höchsten Vorgang kennzeichnen (mittels 0/1).

Vielleicht könntest du nochmal drüber gucken. Danke!

vg Julian Smile

Beispiel.zip
 Beschreibung:

Download
 Dateiname:  Beispiel.zip
 Dateigröße:  14.16 KB
 Heruntergeladen:  509 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Excel-Datei unterscheidet sich stark von dem ersten Beispiel. Das ist generell ungünstig.

Falls ein Bauteil immer nur in einem Block am Stück vorkommt, ist die Lösung recht einfach:
Code:
data = xlsread('Beispiel.xlsx');
data(:,3) = ~isnan(data(:,1)) & [diff(data(:,1)) ~= 0; 1];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 19.06.2015, 09:43     Titel:
  Antworten mit Zitat      
Hi Julian,

ich glaube du hast nicht verstanden wie ich das meine.
Die Anzahl der Vorgänge ist egal. Der letzte Bearbeitungsschritt ist bei einer zeitsortierten Matrix der Punkt an dem das Bauteil zum letzten mal vorkommt, außer die Matrix ist entgegen der Behauptung deines ersten Posts doch nicht nach der Zeit orientiert.

D.h. du musst nur auslesen, wann das Bauteil zum letzten mal in der Matrix steht, diese Zeile kannst du dann mit einer 1 vermerken, alle anderen werden automatisch mit einer 0 gefüllt.

Somit funktioniert mein erster Ansatz vom Prinzip her:

Code:
data = xlsread('Beispiel.xlsx');
Bauteilnummer=unique(data(:,1));
for i=1:length(Bauteilnummer)
    x=find(data==Bauteilnummer(i),1,'last');
    data(x,3)=1;
end


vg Knygs
Private Nachricht senden Benutzer-Profile anzeigen
 
JulianGlaab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2015, 11:52     Titel:
  Antworten mit Zitat      
Hallo zusammen,

danke euch beiden für eure Antworten.
@Harald,deine Lösung hat in diesem speziellen Fall gut geklappt.

@Knygs, ist mir zwischenzeitlich dann auch gekommen und ich hab das nach diesem Prinzip dann schlussendlich implementiert.

Ich konnte an beiden Beispielen was lernen.

Danke für die Hilfe nochmal! 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.