Verfasst am: 08.04.2016, 15:41
Titel: Knoten im Hirn: Datenzuordnung
Hallo zusammen,
ich habe folgendes Problem bei der Zuordnung von Messdaten. Das Beispiel ist arg gekürzt. In Realität haben die Vektoren ca. 1e6 Einträge.
Ich habe zwei Listen (Charakter-Array): Namen und Kennzahlen. Jedem Namen sollte eine Kennzahl zugeordnet sein. Manchmal tritt aber eine Messfehler auf, bei dem die Kennzahlen nicht richtig mitgeschrieben werden. Nun versuche ich im Nachgang dies wieder auszumerzen.
Beispiel:
Code:
Namen = ['ABC123';...
'ABC456';...
'ABC456';...
'ABC789';...
'ABC789';...
'ABC789'];
Namen = ['ABC123';...
'ABC456';...
'ABC456';...
'ABC789';...
'ABC789';...
'ABC789'];
fprintf('Ausgangssituation\n');
for i = 1:N
fprintf('%s %s\n',Namen(i,:), Kennzahl(i,:));
end
%% Sehr langsame Loesung fprintf('\n Zuordnung...\n\n');
N = length(Namen);
idx = false(N,1);
idx_NIO = find(Kennzahl(:,1) == '.');
idx(idx_NIO)=1; % alle Fehler im Kennzahl-Vektor sind mit 1 versehen
Ja stimmt, so könnte es klappen. Ich muss aber mal sehen, ob immer der erste Eintrag mit einer Kennzahl versehen ist. Werde es Montag oder Dienstag, wenn ich wieder am Schaffen bin, checken.
Verfasst am: 09.04.2016, 23:12
Titel: Re: Hier der vollständige Code
Hallo ActionAndi,
Aufbauend auf Winkdows Vorschlag funktioniert dies auch, wenn die ersten Werte ungültig sind. Dafür werden die Kennzahlen zunächst sortiert, so dass ungültige Werte am Schluss auftauchen:
Ja, das war ein Tippfehler im Forum, weil ich eigentlich mit Cell Strings gearbeitet habe. Allerdings habe ich die Test-Daten ja nur erstellt, weil ich keine Original-Daten hatte und nicht warten wollte, bis Du welche postest. Du selbst kannst natürlich Deine eigenen Daten zum Testen verwenden. Das wäre sogar sinnvoller.
Der Vollständigkeit halber:
Code:
v = randi(1000, 1, 1e6);
K = char(sprintfc('k%04d', v));
K(rand(size(K,1),1) > 0.9, :) = '.'; % [BUG FIXED]
N = char(sprintfc('n%04d', v));
vielen Dank! Da die Generierung meiner Testdaten sehr aufwändig ist, war ich echt froh, dass Du mir gezeigt hast, wie ich einfach die Testdaten erzeugen kann. Also habe ich gleich zwei(!) Sachen gelernt!
Eure Lösung ist ca. 25 Mal schneller als meine... Getestet mit 10000 Einträgen.
Super!!!
Vielen Dank,
Andreas
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
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.