【问题标题】:Making time bins bigger in a large dataset with python使用 python 在大型数据集中使时间箱变大
【发布时间】:2015-11-24 20:30:53
【问题描述】:

我有一个数据集,其中包含一个大小为 1/4096 秒的时间箱数组,与每个时间箱中的光子数相对应。现在,我想通过将时间箱放大 2 倍来更改分辨率,将其中的 2 个相加并取平均值,包括时间和光子计数。我尝试了一些方法,例如:

tnew = [] 
for n in range(int((len(t))/2)):
    tnew[n] = (t[2*n]+t[2*n+1])/2

和:

for l in range(int((len(t))/2):
    np.append(t, (np.sum(t[2*l:4096*(2*l+1)]))/2)

但我似乎无法完成这项工作。我对 Python 真的很陌生。

【问题讨论】:

    标签: python


    【解决方案1】:

    如果要取 NumPy 数组中相邻元素的均值,可以这样做:

    In [2]: a = np.arange(10)
    In [3]: a
    Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    In [4]: (a[:-1:2] + a[1::2])/2.
    Out[4]: array([ 0.5,  2.5,  4.5,  6.5,  8.5])
    

    这里,a[:-1:2] 是偶数索引处的所有元素,a[1::2] 是奇数索引处的所有元素。

    在您的情况下,由于您的数组长度是 2 的幂,您可以选择允许通过 m = 2、4、8 等进行分箱,方法是沿相应轴重新整形并取平均值:

    In [5]: n = 1024
    In [6]: a = np.arange(n)
    In [7]: m = 8
    In [8]: b = a.reshape((a.shape[0]/m, m))
    In [9]: b.mean(axis=1)
    Out[9]:
        array([    3.5,    11.5,    19.5,    27.5,    35.5,    43.5,    51.5,
                  59.5,    67.5,    75.5,    83.5,    91.5,    99.5,   107.5,
                  ...
              ])
    

    【讨论】:

    • 如果我想将它们更改 10 倍呢?我想我需要一种不同的方法,还是这样的方法仍然适用?
    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 2017-10-09
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多