【问题标题】:Find frequency of elements above a threshold for each cell in MATLAB在 MATLAB 中查找每个单元格的阈值以上元素的频率
【发布时间】:2014-11-28 08:53:32
【问题描述】:

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

【问题讨论】:

  • 您是否可以切换到二维矩阵,因为您的所有数据都是数字的?然后第一列是经度,第二列是纬度,依此类推。对这个矩阵的操作会更容易理解。您能否提供一个最小的代码示例来返回您的 4D 数组的示例?
  • 执行 n=squeeze(n) 后,它会给出 122x16 维度的二维矩阵。

标签: matlab matrix distribution frequency


【解决方案1】:

根据定义,第 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

【讨论】:

  • 谢谢,那是很久以前的事了。我想我应该改进这个问题。从那以后,我的统计数据有所改善。
  • 欢迎您。这是前一段时间,但仍然是一个很好的问题。我想回答这个问题,因为我自己不止一次做过同样的事情:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多