​
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);

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐