Is there an alternative for the ismember() function in a for loop?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
I have a program that reads an xlsx file, finds unique rows in the first 3 columns and compares these unique rows to all the rows in the same 3 columns in the initial table that was imported. The goal is to find the indices of the matching rows to find duplicates. There is another column that contain values that I want to compare. So I want to find the duplicate rows and compare their values, and if they're differen, I store them in a new table. The problem is that the imported data is really large, so it takes a very long time for this function to finish what it's doing.
I would be thankful, if you had any suggestions that would help me speed up the process. Here you can see the code that I've described:
[file,path] = uigetfile('*.xlsx');
filename = [path file];
[~,~,raw_file] = xlsread(filename);
tabelle = cell2table(raw_file(2:end, 1:3));
unirow = unique(tabelle, 'rows', 'stable');
daten = cell2table(raw_file(2:end, :));
error_table = table;
idxrow = 1;
datum = datestr(datetime(raw_file(2,2)), 'yyyymmdd');
for ii = 1: size(unirow,1)
[lia,~] = ismember(tabelle,unirow(ii,:));
idx = find(lia);
% idx = find(cellfun(@(c)all(strcmp(unirow(ii,1:3),c)),num2cell(raw_file(2:end,1:3),2)));
werte = daten(idx, 9);
if size(unique(werte),1) > 1
for jj = 1:size(idx, 1)
error_table(idxrow, :) = daten(idx(jj,1),:);
idxrow = idxrow + 1;
end
end
end
0 Kommentare
Antworten (1)
David Hill
am 9 Dez. 2020
Have you looked at the unique() function? It might work for you.
a=unique(A,'rows','stable');
3 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!