Matlab 统计每行或每列中,元素出现的个数及比例

研究背景:

使用地理探测器进行探测分析,有X变量是单一值,因为有大量的矩阵,不能手动单一修改,所以要先对矩阵按列,统计每列各个元素的个数,若有一列只有一个或两个值,则要删除该列。
Matlab 统计每行或每列中,元素出现的个数及比例_第1张图片

使用的函数:tabulate()函数

tabulate()函数是一个常用的计算矩阵中各个元素出现次数的函数,这里我们只需要稍加变通,设全部的矩阵为dataall,只需要在前面加上一句:data = dataall(:,1),类似于这样的一句,这样table = tabulate(data)计算的就是某一列各元素出现的个数。

再通过if函数判断,如果table行数少于3,那么便是不符合要求的数据。

实例:

    
    %检索每列元素的出现次数,使用tab在输出文件名上标记,单独对个别的不符合要求的数据进行手动处理
    datax1=dataall(:,2);
    datax2=dataall(:,3);
    datax3=dataall(:,4);
    tablex1 =  tabulate(datax1);
    tablex2 =  tabulate(datax2);
    tablex3 =  tabulate(datax3);
    %删除table中出现次数为0的行,次数在第二列
    tablex1(find(tablex1(:,2)==0),:)=[];
    tablex2(find(tablex2(:,2)==0),:)=[];
    tablex3(find(tablex3(:,2)==0),:)=[];
    %计算table的行数,如果少于3行,就不能进行地理探测
    [m1,n1]=size(tablex1);
    [m2,n2]=size(tablex2);
    [m3,n3]=size(tablex3);
    if m1<3 || m2<3 || m3 <3 
        tab = "j";
    else
        tab = "a";
    end 
    
    %输出路径与文件名
    outpath1=strcat('D:\city\2000\\',tab,pathori(1:4));
    outpath=strcat(outpath1,'.xlsx');

Matlab 统计每行或每列中,元素出现的个数及比例_第2张图片
这样只从几百个里面筛选出来了几个不符合要求的,幸好不符合要求的不多,可以手动删除,否则还要使用matlab进行修改,删掉不符合要求的列

你可能感兴趣的:(学习笔记,ArcGIS脚本学习杂录,matlab,numpy,python,ArcGIS,Pro)