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

时间:2014-11-28 08:53:33

标签: matlab matrix distribution frequency

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

我做了一些事情,它为每个细胞提供了一个与98百分位相关的17x14矩阵,但我无法确定出现的频率。

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包含所有单元格的相同值。这怎么可能?我做错了什么?请帮忙。

1 个答案:

答案 0 :(得分:0)

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

我猜你r的价值是39; 122x16矩阵的前2%中的元素数(即1952个元素)。

r = 0.02*1952; 

r = 
      39.040 

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

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

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