首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用if条件和find命令重塑矩阵?

如何使用if条件和find命令重塑矩阵?
EN

Stack Overflow用户
提问于 2019-01-24 22:50:14
回答 2查看 61关注 0票数 1

假设我有

代码语言:javascript
复制
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];

我想要有一个矩阵

代码语言:javascript
复制
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

我试过使用下面的代码:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-25 01:01:48

你需要的是累积的二维直方图。对于same question,您只需要使用hist3计算2D直方图,然后使用cumsum获得累积结果。请注意,filplr用于从头到尾进行累加:

代码语言:javascript
复制
dcat = [dcat inf];
hcat = [hcat inf];
pkg load statistics
[obs, ~] = hist3(dat_h ,'Edges', {dcat,hcat});
nx = fliplr(cumsum(fliplr(obs),2));
票数 2
EN

Stack Overflow用户

发布于 2019-01-25 03:23:38

您可以使用以下一行代码获得您想要的内容:

代码语言:javascript
复制
accumdim ( dat_h(:,1), dat_h(:,2) >= hcat )

如果你想了解它是如何工作的,请看一下accumdim的文档。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54349356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档