虽然我确信有一个答案,而且这个问题非常低级(但它总是让你感到轻松的事情),我的主要问题是试图提出这个问题。
说我有以下数组:
time=[0,1,2,3,4,5,6,7,8,9,10,11] ;in seconds
data=[0,1,2,3,4,5,6,7,8,9,10,11]
'时间'数组在' 1s'的bin中,但我希望数组在' 2s'的bin中。那么数据就是平均值:
time=[0,2,4,6,8,10] ;in seconds
data=[0.5,2.5,4.5,6.5,8.5,10.5]
是否(我确信有)IDL功能在IDL中实现这个功能? 我的实际数据数组是:
DATA DOUBLE = Array[15286473]
所以我宁愿使用现有的,高效的解决方案而不是不必要地创建我自己的解决方案。
干杯, 保罗
注意:我可以通过插入数据(国际刑警组织)
将时间数组更改为我想要的数组IDL> x=[0,1,2,3,4,5,6,7,8,9,10]
IDL> x_new=interpol(x,(n_elements(x)/2)+1.)
IDL> print, x_new
0.00000 2.00000 4.00000 6.00000 8.00000 10.0000
问题在于数据数组
答案 0 :(得分:1)
我认为您需要rebin
:http://www.exelisvis.com/docs/REBIN.html
congrid
提供类似的功能。如果rebin
无法解决您的问题,则应该有效:
step = 2
select = step * indgen(floor(n_elements/step))
new_time = (smooth(time, step))[select]
new_data = (smooth(data, step))[select]
您可能希望根据您的要求将/ edge_truncate设置为平滑。另外,不会为你工作吗?
答案 1 :(得分:0)
我可以想到几种方法,但最简单的方法如下:
if(bank[d] instance of Saving)
我描述的索引形式是here。可以将数组写为nd = N_ELEMENTS(data)
ind = LINDGEN(nd)
upi = ind[1:(nd - 1L):2]
dni = ind[0:(nd - 1L):2]
,其中ind[s0:s1:n]
是起始元素,s0
是结束元素,s1
是 stride 。 / p>
既然我们有了adjecent元素的索引,那么我们可以将矢量化格式的平均值定义为:
n
您可以执行类似于时间戳的操作,或者如果您愿意,可以使用avg_data = (data[upi] + [dni])/2
。
这样做有更复杂的方法(例如trapezoid rule),但上面是一个快速而简单的解决方案。