【问题标题】:Python detrend 3d dataset with NaNsPython 用 NaN 去趋势 3d 数据集
【发布时间】:2018-12-20 04:56:56
【问题描述】:

我正在尝试对大小为 480x2040 = 接近 1,000,000 像素的数据集进行去趋势处理。 我在这个系列(年)中有 17 个时间步,但是我想在某个时候移到每日时间步。此代码有效,但是运行方式太慢而无法正常运行。

我觉得 scipy.signal.detrend 可以做整个数据集,但是我有一些 NaN。在某些情况下,NaN 是大陆,这意味着在每个时间步都有一个 NaN,但在极少数情况下,会丢失一些数据。

如何在忽略/跳过 NaN 的同时随着时间的推移消除地图的每个像素的趋势?它需要比这种循环快几个数量级。

  for i in range(0,nlat):
    for j in range(0,nlon):
        pixel = ds[:,i,j]
        b = ~np.isnan(pixel)
        detrend[b,i,j]=signal.detrend(pixel[b])

干杯!

【问题讨论】:

    标签: python python-3.x numpy scipy signal-processing


    【解决方案1】:

    我不确定是否可以让 signal.detrend 在数组基础上跳过 NaN。但是,您可以使用某种方法来填充缺失的数据,然后去趋势。如果您丢失的数据点很少,那么其影响应该可以忽略不计。

    由于大陆总是 NaN,您可以用一些特殊的标记值替换它们,因为无论如何您都不会关心它们的趋势。对于缺失数据 NaN,我建议使用非常适合时间序列的pandas,用于填充缺失数据的各种方法。我将在这里使用最简单的方法——从先前已知的值进行前向填充——但您也可以使用更复杂的方法,例如取相邻值的平均值或插值。

    import scipy.signal as signal
    import numpy as np
    import pandas as pd
    
    ''' Construct fake data'''
    # construct some map-like values
    pix = np.random.randint(256, size=(10,20))
    ds = np.zeros((10, pix.shape[0], pix.shape[1]))
    for i in range(1,11):
        ds[i-1,:,:] = i*pix
    
    # 5% missing data
    ds[(np.random.rand(10,10,20) < 0.05)] = np.nan
    # a square continent
    ds[:,1:3,5:10] = np.nan
    
    ''' Solution based on fake data'''
    # assign some marker value to continents
    ds[:, np.all(np.isnan(ds), axis=0)] = -1
    
    df = pd.Panel(ds)
    df.fillna(method='ffill', axis=0, inplace=True) # forward fill
    df.fillna(method='bfill', axis=0, inplace=True) # backfill in case there are nans in first timestep
    
    detrended = signal.detrend(df.values)
    

    【讨论】:

    • 感谢您的回复。我不是 100% 相信 NaN 值的 -1 标记,但我会试一试,看看会发生什么!我可能需要制作一个大陆面具,以便将它们映射回我的情节。
    • @NicPittman -1 就是一个例子,您可以使用适合您数据的大陆 NaN 的任何其他值 - 即您知道否则不会遇到的值。缺失的数据NaNs当然不会是-1,而是根据你用pandas选择的填充方式设置。
    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多