Ich habe eine Tabelle in Matlab mit einigen Spalten, die 128-Bit-Hashes darstellen.Schnellste Art zum Vergleichen von Hashes in Matlab
Ich möchte Zeilen, auf eine oder mehrere Zeilen, basierend auf diesen Hashes übereinstimmen.
Derzeit werden die Hashes als hexadezimale Zeichenfolgen dargestellt und mit strcmp()
verglichen. Trotzdem dauert es viele Sekunden, um den Tisch zu bearbeiten.
Was ist der schnellste Weg, um zwei Hashes in Matlab zu vergleichen?
Ich habe versucht, sie in kategorische Variablen zu verwandeln, aber das ist viel langsamer. Matlab, soweit ich weiß, hat keinen 128 Bit numerischen Typ. nominal und ordinal Typen sind veraltet.
Gibt es noch andere, die funktionieren könnten?
Der folgende Code ist analog zu dem, was ich tue:
nodetype = { 'type1'; 'type2'; 'type1'; 'type2' };
hash = {'d285e87940fb9383ec5e983041f8d7a6'; 'd285e87940fb9383ec5e983041f8d7a6'; 'ec9add3cf0f67f443d5820708adc0485'; '5dbdfa232b5b61c8b1e8c698a64e1cc9' };
entries = table(categorical(nodetype),hash,'VariableNames',{'type','hash'});
%nodes to match. filter by type or some other way so rows don't match to
%themselves.
A = entries(entries.type=='type1',:);
B = entries(entries.type=='type2',:);
%pick a node/row with a hash to find all counterparts of
row_to_match_in_A = A(1,:);
matching_rows_in_B = B(strcmp(B.hash,row_to_match_in_A.hash),:);
% do stuff with matching rows...
disp(matching_rows_in_B);
Die Hash-Strings sind treue Darstellungen von dem, was ich verwende, aber sie sind nicht unbedingt lesen oder als Zeichenfolgen in der Originalquelle gespeichert. Sie werden nur für diesen Zweck konvertiert, weil es der schnellste Weg ist, den Vergleich zu machen.
Ein [mcve] kann helfen –
Ich denke, die Frage ist ziemlich selbsterklärend. Wie auch immer, ich habe nicht viel zu diesem Problem zu sagen - könnte bestenfalls zwei 64-Bit-Double versuchen? Jemand mit einem besseren Hintergrund in dieser Angelegenheit kann helfen, nehme ich an. – crazyGamer
Es ist nicht selbsterklärend ... das ist ein MATLAB-zentrisches Problem, aber vielleicht haben 99% der MATLAB-Beantworter hier keine Ahnung, wie ein "Hash" aussieht! Sie sagen, Sie haben eine Tabelle, können Sie klarstellen, dass dies tatsächlich der Datentyp 'Tabelle' oder nur ein anderes Wort für Matrix ist (Jargon-Probleme sind hier üblich). Sie sagen, dass Sie gerade "strcmp" verwenden, zeigen Sie uns 2 Hashes, wie Sie sie vergleichen usw. (auch nur diese 3 Zeilen Code!), So haben wir ein konkretes Beispiel für das, was Sie erreichen möchten. Sie sprechen über numerische Typen, wenn Sie gerade den Vergleich von Strings erwähnt haben. Was sind Ihre Hashes? – Wolfie