Matlab将数组中符合某一条件的数据与位置提取


前言

需求:找到多组数据中,同时为多组数据中的归一化后的前百分之几的数据点的位置。需要将多组数据中的前百分之几的数据进行提取,同时获取其对应的位置与数据,并对提取出来的数据找到其同位置的并集。


一、提取符合条件的数据

示例:有随机生成的两组数据如下:

% 随机生成均匀分布的随机整数, 0 ~ 20 开区间中1*10矩阵 
E1 = randi(20,1,10)
E2 = randi(20,1,10)

运行结果
在这里插入图片描述

先使用归一化,再直接判断是否大于条件(如数据归一化后的前30%),再提取位置和数据

E1_1 = mapminmax(E1, 0, 1); %数据归一化,注意此函数功能为将每一行数据归一化为0-1,
E2_1 = mapminmax(E2, 0, 1);%如果数据矩阵为多行一列将无法归一化
Location_E1=find(E1_1>0.7); %前30%的点的位置
Location_E2=find(E2_1>0.7); 
Roi_E1=E1_1>0.7;%掩膜
Roi_E2=E2_1>0.7;%掩膜
Data_E1=E1 (Roi_E1);%高于条件的具体数据值
Data_E2=E2 (Roi_E2);
%可以使用一个矩阵专门存取数据
Filter_Results_E1=[Location_E1;Data_E1];
Filter_Results_E2=[Location_E2;Data_E2];

注意:本文中的条件为归一化的前百分之几,而不是排在前百分之几的数据,假如数据存在着突变,会影响归一化后的分布,从而可能出现只有一个数符合或者大多数符合。如果需要排列在前百分之几的数据,可以先排序,再取数据。

代码如下示例

%降序
[E1_2,L1]= sort(E1,2,"descend")%即可得到排序后的数和各数在原排列中排第几
[E2_2,L2]= sort(E2,2,"descend")
% %升序,要升序就注释上面,取下面
% [E1_2,L1]= sort(E1,2)
% [E2_2,L2]= sort(E2,2)
t=round(length(E1)*0.3);%前百分之30的点的个数
Data_E1_Sort=E1_2(1:t)%数据值
Data_E2_Sort=E2_2(1:t)
Location_E1_Sort=L1(1:t)%位置
Location_E2_Sort=L2(1:t)
Filter_Results_E1=[Location_E1_Sort;Data_E1_Sort]%存储数组
Filter_Results_E2=[Location_E2_Sort;Data_E2_Sort]

运行结果
在这里插入图片描述

二、找到数组中的相同元素

代码如下(示例):

Filter_Results=Location_E1(ismember(Location_E1, Location_E2))%两个位置集的交集

运行结果(示例)
运行结果


总结

按照上述代码即可将符合某一条件的数据进行提取,然后取并集。

参考来源

1.如何利用 Matlab实现矩阵相同元素的查找? - 王赟 Maigo的回答 - 知乎
https://www.zhihu.com/question/23099007/answer/23599370
2.https://blog.csdn.net/gxuan/article/details/8989104
3.https://blog.csdn.net/shulianghan/article/details/115718713#2_200

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值