[英]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.