繁体   English   中英

查找MATLAB中每个单元的阈值以上元素的频率

[英]Find frequency of elements above a threshold for each cell in MATLAB

我有一个4-D矩阵。 维度是经度,纬度,天,年,为[17,14,122,16]。 我必须找出每个单元格中98%以上的值的频率,以便最终输出为17x14数组,其中包含出现次数超过98%阈值的值。

我做了一些事情,使我获得了一个矩阵17x14的值,与每个单元格的98个百分位数相关,但我无法确定出现的频率。

k=0;
p=cell(1,238);
r=cell(1,238);

for i=1:17
   for j=1:14
      n=m(i,j,[1:122],[1:16]);
      n=squeeze(n);
      k=k+1;
      q=prctile(n(:),98);
      r{k}=nansum(nansum(n>=q));
      p{k}=q;
   end
end

此代码使矩阵p精细,但矩阵r对于所有单元格都包含相同的值。 这怎么可能? 我在做什么错呢? 请帮忙。

根据定义,高于第98个百分点的值的频率为2%。

我猜想你得到的r 39。 122x16矩阵顶部2%的元素数量(即1952个元素)。

r = 0.02*1952; 

r = 
      39.040 

您的代码正在验证理论值。 也许您在想一个不同的问题?

这是一个模拟示例,对数据( n )使用从0到100的随机生成(均匀分布)。

p=cell(1,238);
r=cell(1,238);
for i=1:17
    for j=1:14
        %         n=m(i,j,[1:122],[1:16]);
        %         n=squeeze(n);

        % After you do n=squeeze(n), it gives 2-D matrix of 122x16
        % dimensions.
        n = rand(122,16)*100;  % simulation for your 2-D matrix
        k=k+1;
        q=prctile(n(:),98);
        r{k}=nansum(nansum(n>=q));
        p{k}=q;
    end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM