matlab 找到非空的位置 去除重复数据/去除NaN 在一列数据中找到另一列数据的位置
3、[b,m,n] = unique(...)也返回索引向量m和n,使得B = A(M)和A= B(N)。m的每一个元素是最大的下标,使得B = A(M)。对于行的组合,B = A(M,:)和A= B(N,:)。1、b = unique(A)返回的是和A中一样的值,但是没有重复元素。产生的结果向量按升序排序。A可以是一个字符串的单元阵列。2、b = unique(A,'rows')返回的是A中的唯
idx = find(isnan(data));
idx = find(~isnan(data))
[dat in] = unique(data(:,n));
b = unique(A)
b = unique(A,'rows')
[b,m,n] = unique(...)
b = unique(A)
b = unique(A,'rows')
[b,m,n] = unique(...)
ismember,matlab中help的例子如下:
a=[1 2 3 4 5];
set = [5 2 4 2 8 10 12 2 16 18 20 3];
[tf, index] = ismember(a, set);
index返回a中的元素在set中出现的位置,若为0表示未找到,这个例子的结果为:
index=[0 8 12 3 1];
描述
1、b = unique(A) 返回的是和A中一样的值,但是没有重复元素。产生的结果向量按升序排序。A可以是一个字符串的单元阵列。
2、b = unique(A,'rows') 返回的是A中的唯一的行数。
3、[b,m,n] = unique(...) 也返回索引向量m和n,使得B = A(M)和A= B(N)。m的每一个元素是最大的下标,使得B = A(M)。对于行的组合,B = A(M,:)和A= B(N,:)。
当我们处理包含很多元素的数组或者数据表时,如果遇到需要处理掉NaN值的情况,可以用这一招非常快捷地删掉这些缺失的内容。需要用到的命令是:rmmissing
操作
rmmissing常见用法:
rmmissing(A):
从数组或表中删除缺失的条目。若A为向量,则rmmising会删除所有缺失数据的NaN部分。若A为矩阵或表,则rmmising会删除所有包含NaN所在的行数据。
例如:
A=[1,3,5,7,NaN,4,6,8];
B=rmmissing(A);
结果:
B =
1 3 5 7 4 6 8
rmmissing(A,dim):
沿着指定运算的维度,删除所有NaN所在的行或列。
dim为1则沿着行来删除,2则沿着列来删除。
例如:
A=[1,3,NaN,7;
2,4,6,8;
11,33,55,77;
22,44,66,NaN];
B=rmmissing(A,2);
结果(删除包含NaN的第3、4列):
B =
1 3
2 4
11 33
22 44
在 MATLAB 中,如果你只想根据数据的第3列和第4列去重,并保留其他列的数据,可以通过以下代码实现:
% 假设你的数据存储在矩阵 A 中
A = [
1 2 3 4;
5 6 7 8;
9 10 11 12;
13 14 3 4; % 第3列和第4列重复
15 16 7 8; % 第3列和第4列重复
17 18 3 4 % 第3列和第4列重复
];
% 提取第3列和第4列
col34 = A(:,3:4);
% 使用 unique 函数对第3列和第4列去重
[~, idx] = unique(col34, 'rows', 'first'); % 'first' 表示保留第一个重复行
% 根据索引提取唯一行
unique_rows = A(idx, :);
% 显示结果
disp(unique_rows);
在 MATLAB 中,如果你的数据中第 4 列和第 5 列(假设是经纬度)有重复,而你希望在每段重复的经纬度数据中找到第 6 列绝对值最小的那一行,将其余数据输入到另一个矩阵中,可以通过以下步骤实现:
% 示例数据矩阵 A
A = [
1, 2, 3, 4, 5, 0.1;
6, 7, 8, 4, 5, -0.2;
9, 10, 11, 4, 5, -0.05; % 重复的经纬度 (4, 5),第 6 列绝对值最小
12, 13, 14, 6, 7, 0.3;
15, 16, 17, 6, 7, -0.4;
18, 19, 20, 6, 7, 0.25; % 重复的经纬度 (6, 7),第 6 列绝对值最小
21, 22, 23, 8, 9, -0.6;
24, 25, 26, 8, 9, 0.55;
27, 28, 29, 8, 9, -0.5; % 重复的经纬度 (8, 9),第 6 列绝对值最小
];
% 提取第 4 列和第 5 列作为经纬度
lat_lon = A(:, 4:5);
% 找到唯一的经纬度组合
[unique_lat_lon, ~, idx] = unique(lat_lon, 'rows');
% 初始化结果矩阵
result_min = []; % 存储绝对值最小的行
result_other = []; % 存储其他行
% 遍历每个唯一的经纬度组合
for i = 1:size(unique_lat_lon, 1)
% 找到当前经纬度组合的所有行
rows_with_same_lat_lon = find(idx == i);
% 在这些行中找到第 6 列绝对值最小的行
[~, min_idx] = min(abs(A(rows_with_same_lat_lon, 6)));
selected_row = A(rows_with_same_lat_lon(min_idx), :);
% 将该行添加到结果矩阵中
result_min = [result_min; selected_row];
% 将其他行添加到另一个结果矩阵中
other_rows = A(rows_with_same_lat_lon, :);
other_rows(min_idx, :) = []; % 删除绝对值最小的行
result_other = [result_other; other_rows];
end
% 显示结果
disp('Selected rows with minimum absolute value in column 6 for each unique latitude and longitude:');
disp(result_min);
disp('Other rows:');
disp(result_other);
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)