假设我有
dat_h=[1 0.12; 1 0.77; 2 0.37; 2 0.11; 3 0.44; 3 0.41; 4 0.91; 4 0.71; 5 0.51; 5 1.5];
dcat=1:5;
hcat=[0.1 0.3 0.6 0.8 1.0];我想要有一个矩阵
nx=
[ 2 1 1 0 0;
2 1 0 0 0;
2 2 0 0 0;
2 2 2 1 0;
2 2 1 1 1]它包含dat_h的第二列中每个值的出现次数,该值大于hcat的每个元素(以列为单位),其中nx的行表示dcat。
我试过使用下面的代码:
for i=1:length(dcat)
for j=1:length(hcat)
for k=1:length(dat_h)
if i==dat_h(k,1)
nx(i,j)=length(find(dat_h>=hcat(j)));
else
continue
endif
endfor
endfor
endfor我所拥有的只是nx=1。
发布于 2019-01-25 01:01:48
你需要的是累积的二维直方图。对于same question,您只需要使用hist3计算2D直方图,然后使用cumsum获得累积结果。请注意,filplr用于从头到尾进行累加:
dcat = [dcat inf];
hcat = [hcat inf];
pkg load statistics
[obs, ~] = hist3(dat_h ,'Edges', {dcat,hcat});
nx = fliplr(cumsum(fliplr(obs),2));发布于 2019-01-25 03:23:38
您可以使用以下一行代码获得您想要的内容:
accumdim ( dat_h(:,1), dat_h(:,2) >= hcat )如果你想了解它是如何工作的,请看一下accumdim的文档。
https://stackoverflow.com/questions/54349356
复制相似问题