首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算IDL中数据的数量分布

如何计算IDL中数据的数量分布
EN

Stack Overflow用户
提问于 2018-06-12 20:27:44
回答 1查看 56关注 0票数 1

我有一个由时间和流量组成的数据(4117行x 2列),我想计算和绘制与图片distribution of brightness variation相同的所有两对连续数据点之间亮度变化的数量分布

这是我在idl中使用的代码

代码语言:javascript
复制
nx=4117
t=fltarr(nx)
f=fltarr(nx)
df=fltarr(nx-1)
dt=fltarr(nx-1)
n=4116
dff=fltarr(n)
dc=fltarr(n-1)

data=read_table('data.dat')
;print,data(0,*) ;this is t (time)
;print,data(1,*) ;this is f (flux)

; Plot the light curve

window,0
plot,data(0,*)/data(0,0),data(1,*)/data(1,0),yrange=[0.93,1.1],ystyle=1 

; calculate the flux difference (dff)

for i=0,nx-2 do begin
df(i)=data(1,i+1)/data(1,0) - data(1,i)/data(1,0)
dt(i)=data(0,i+1)/data(0,0) - data(0,i)/data(0,0)
endfor

for i=0,n-1 do dff(i)=min(df)+i*(max(df)-min(df))/float(n-1.0)

print,dff

; calculate the number distribution (dc), I want the counter to reset to zero after every point and start to count again

for i=0,n-2 do begin
c=0.0
for j=0,nx-2 do begin
IF (df(j) < dff(i+1)) or (df(j) > dff(i)) THEN begin
c=c+1
dc(i)=c
endif
endfor

print, dc(i)
endfor

end

当我运行代码时,dc的所有值都是4116。我认为我计算dc的方法是错误的。有什么建议以适当的方式来做这件事吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 00:16:20

我很确定问题出在这一行:

代码语言:javascript
复制
IF (df(j) < dff(i+1)) or (df(j) > dff(i)) THEN begin

在IDL中,a < b是“a和b中较小的”的缩写,而a > b同样是“a和b中较大的”。所以现在,IF语句的计算结果实际上是:

代码语言:javascript
复制
IF (df(j) or dff(i+1), whichever is less) OR (df(j) or dff(i), whichever is more) THEN begin

由于在IDL中非零浮点数的计算结果为TRUE,因此最终结果如下:

代码语言:javascript
复制
IF TRUE or TRUE THEN begin

因为IF语句总是真的,所以c总是递增的,并且dc的每个值最终都是4116。

要解决这个问题,您需要使用关系运算符LTGT,它们返回TRUE或FALSE。换句话说,你的代码应该是:

代码语言:javascript
复制
IF (df(j) LT dff(i+1)) or (df(j) GT dff(i)) THEN begin
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50817241

复制
相关文章

相似问题

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