通过平均数组中的点(IDL)来减小数组的大小

时间:2015-04-23 10:37:18

标签: arrays idl smoothing binning

虽然我确信有一个答案,而且这个问题非常低级(但它总是让你感到轻松的事情),我的主要问题是试图提出这个问题。

说我有以下数组:

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

问题在于数据数组

2 个答案:

答案 0 :(得分:1)

我认为您需要rebinhttp://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),但上面是一个快速而简单的解决方案。