MATLAB Data Processing — удаление повторяющихся данных
Каталог статей
предисловие
Предполагая, что в матрице 100 * 8 есть повторяющиеся строки, как сохранить неповторяющиеся строки, удалить повторяющиеся строки и сохранить их в исходном порядке расположения?
1. Функция
Используйте уникальную функцию, которая поставляется с MATLAB, ее формат:
[uniqueData, ~, idx] = unique(data, 'rows', 'stable');
Здесь «строки» означает дедупликацию по строкам, а «стабильный» означает сохранение строки, которая появляется в первый раз. uniqueData — это массив ячеек после дедупликации, а idx — это индекс каждой строки в массиве дедупликации, который можно использовать для восстановления исходного массива.
Два, используйте
1. Если все данные числовые, вы можете использовать следующий код:
[uniqueRows, ~, idx] = unique(data,'rows','stable');
uniqueIdx = unique(idx);
uniqueA = data(uniqueIdx,:);
Уникальная функция возвращает уникальные значения в idx, то есть индексы, по которым каждая повторяющаяся строка встречается впервые, и эти индексы в конечном итоге используются для извлечения матрицы в A.
Примечание. Используемые здесь данные являются числовыми.
2. Если данные содержат как числовые, так и текстовые типы, как с этим быть? Давайте сначала импортируем данные, вот два метода.
(1) Используйте функцию readtable для чтения файла Excel, содержащего текстовые данные, а затем удалите повторяющиеся строки.
%% 读取数据
filename = '路径\example.xlsx'; % 输入文件路径和文件名
sheet = 'Sheet1'; % 输入表格名称
data = readtable(filename,'Sheet',sheet);
%% 剔除重复行
[uniqueStrData, ~, idx] = unique(data(:,5:11), 'rows');
% 根据索引取出未重复的行
result = data(unique(idx), :);
(2) Прочитайте файл excel в массив ячеек, а затем удалите повторяющиеся строки.
[a,b,c]=xlsread('路径\名称.xlsx','Sheet'); % 根据自己的文件名进行调整
% 注:a是Excel数字部分(矩阵形式),b为Excel的文本内容(元胞数组形式),c为Excel全部内容(元胞数组形式).
% 将元胞数组转换为字符串型
strData = string(c);
% 使用unique函数去除重复行,这里可以指定需要进行对比的列范围,
% 例如这里指定5到11列的内容作为比对行内容的基础
[uniqueStrData, ~, idx] = unique(strData(:,5:11), 'rows'); %这里只保存5:11列的内容
% 如果想依据5:11列的内容作为条件,在去除重复行的同时,保存所有列的内容,可使用如下代码
result = strData(unique(idx), :); % 使用这行代码的同时,上行代码必须运行,因为这里引用的上串代码中的idx
3. Заключение
Это содержание этого объяснения. Я был немного занят в последнее время и не обновлял его. Увидимся в следующем выпуске!