标签: resampling

在MATLAB中重新采样两个不同长度的数据集

我有两个向量:长度为927的sensorA和长度为1250的sensorB.我想让它们具有相同的长度.MATLAB中的resample()函数在边缘处非常嘈杂,我需要至少相当好的精度.

我知道重新采样可以通过插值完成,但我如何以最有效的方式实现它.我需要尽可能均匀地拉伸927到1250.

我想知道我是否可以这样做:

  1. 我在短矢量中需要333个新样本.因此,对于每3个值,我插入两个连续值的平均值(中点).=>插入309个样本
  2. 对于剩余的我每38个样本再次插入(927 /(333-309))

这有意义吗?我仍然无法得到精确的插值.我还可以使用其他功能吗?(除了interp()因为它需要整体重采样率?)

matlab signal-processing sampling resampling

7
推荐指数
1
解决办法
2万
查看次数

在Julia中将DataFrame重新采样为每小时15分钟和5分钟

我对朱莉娅很新,但是我试试看,因为基准测试声称它比Python快得多.

我试图以["unixtime","price","amount"]格式使用一些股票价格数据

我设法加载数据并将unixtime转换为Julia中的日期,但现在我需要重新采样数据以使用olhc(开,高,低,收盘)作为价格和金额的总和,在特定时期朱莉娅(每小时,15分钟,5分钟等等):

julia> head(btc_raw_data)
6x3 DataFrame:
                           date price  amount
[1,]    2011-09-13T13:53:36 UTC   5.8     1.0
[2,]    2011-09-13T13:53:44 UTC  5.83     3.0
[3,]    2011-09-13T13:53:49 UTC   5.9     1.0
[4,]    2011-09-13T13:53:54 UTC   6.0    20.0
[5,]    2011-09-13T14:32:53 UTC  5.95 12.4521
[6,]    2011-09-13T14:35:04 UTC  5.88   7.458
Run Code Online (Sandbox Code Playgroud)

我看到有一个名为Resampling的软件包,但它似乎只接受一个时间段,只有我想要输出数据的行数.

还有其他选择吗?

resampling dataframe julia

7
推荐指数
1
解决办法
782
查看次数

使用scipy.signal.resample重新采样时间

我有一个未等距采样的信号; 需要进一步处理.我以为scipy.signal.resample会这样做,但我不明白它的行为.

信号在y中,相应的时间在x中.重新采样预期为yy,所有相应的时间均为xx.有谁知道我做错了什么或如何实现我的需要?

此代码不起作用:xx不是时间:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

x = np.array([0,1,2,3,4,5,6,6.5,7,7.5,8,8.5,9])
y = np.cos(-x**2/4.0)
num=50
z=signal.resample(y, num, x, axis=0, window=None)
yy=z[0]
xx=z[1]
plt.plot(x,y)
plt.plot(xx,yy)
plt.show()
Run Code Online (Sandbox Code Playgroud)

python numpy scipy resampling

7
推荐指数
1
解决办法
7090
查看次数

FFmpeg - 从AV_SAMPLE_FMT_FLTP重新采样到AV_SAMPLE_FMT_S16的声音质量非常差(慢,失调,噪音)

我对新ffmpeg的重新取样结果感到困惑.我将AAC音频解码为PCM,ffmpeg将音频信息显示为:

Stream #0:0: Audio: aac, 44100 Hz, stereo, fltp, 122 kb/s
Run Code Online (Sandbox Code Playgroud)

在新的ffmpeg中,输出样本是fltp格式,所以我必须将它从AV_SAMPLE_FMT_FLTP转换为AV_SAMPLE_FMT_S16

PS:在旧的ffmpeg中作为libavcodec 54.12.100,它直接是S16,因此不需要重新采样且没有任何声音质量问题.

然后我尝试了三种方法重新取样,

  1. 使用swr_convert

  2. 使用avresample_convert

  3. 转换manualy

但是它们都会产生相同的结果,声音质量非常糟糕,非常缓慢和失调,还有一些噪音.

我的重采样代码如下:

void resampling(AVFrame* frame_, AVCodecContext* pCodecCtx, int64_t want_sample_rate, uint8_t* outbuf){
    SwrContext      *swrCtx_ = 0;
    AVAudioResampleContext *avr = 0;

    // Initializing the sample rate convert. We only really use it to convert float output into int.
    int64_t wanted_channel_layout = AV_CH_LAYOUT_STEREO;

#ifdef AV_SAMPLEING
    avr = avresample_alloc_context();
    av_opt_set_int(avr, "in_channel_layout", frame_->channel_layout, 0);
    av_opt_set_int(avr, "out_channel_layout", wanted_channel_layout, 0);
    av_opt_set_int(avr, "in_sample_rate", frame_->sample_rate, 0);
    av_opt_set_int(avr, "out_sample_rate", 44100, 0); …
Run Code Online (Sandbox Code Playgroud)

audio ffmpeg aac pcm resampling

7
推荐指数
1
解决办法
1万
查看次数

使用resample或groupby - pandas计算时间序列的百分位数/分位数

我有一个小时价值的时间序列,我试图每周/每月得出一些基本的统计数据.

如果我们使用以下抽象数据框,则每列都是时间序列:

rng = pd.date_range('1/1/2016', periods=2400, freq='H')
df = pd.DataFrame(np.random.randn(len(rng), 4), columns=list('ABCD'), index=rng)
Run Code Online (Sandbox Code Playgroud)

print df[:5] 收益:

                            A         B         C         D
2016-01-01 00:00:00  1.521581  0.102335  0.796271  0.317046
2016-01-01 01:00:00 -0.369221 -0.179821 -1.340149 -0.347298
2016-01-01 02:00:00  0.750247  0.698579  0.440716  0.362159
2016-01-01 03:00:00 -0.465073  1.783315  1.165954  0.142973
2016-01-01 04:00:00  1.995332  1.230331 -0.135243  1.189431
Run Code Online (Sandbox Code Playgroud)

我可以打电话:

r = df.resample('W-MON')
Run Code Online (Sandbox Code Playgroud)

然后用:r.min(),r.mean(),r.max(),这些都很好地工作.例如print r.min()[:5]返回:

                   A         B         C         D
2016-01-04 -2.676778 -2.450659 -2.401721 -3.209390
2016-01-11 -2.710066 -2.372032 -2.864887 -2.387026
2016-01-18 -2.984805 …
Run Code Online (Sandbox Code Playgroud)

python group-by resampling quantile pandas

7
推荐指数
1
解决办法
2651
查看次数

重新取样错误:无法使用方法或限制重新索引非唯一索引

我正在使用Pandas来构建和处理数据.

我这里有一个DataFrame,日期为索引,Id和比特率.我希望按ID分组我的数据并同时重新采样,相对于每个Id的时间,最后保持比特率.

例如,给定:

df = pd.DataFrame(
{'Id' : ['CODI126640013.ts', 'CODI126622312.ts'],
'beginning_time':['2016-07-08 02:17:42', '2016-07-08 02:05:35'], 
'end_time' :['2016-07-08 02:17:55', '2016-07-08 02:26:11'],
'bitrate': ['3750000', '3750000'],
'type' : ['vod', 'catchup'],
'unique_id' : ['f2514f6b-ce7e-4e1a-8f6a-3ac5d524be30', 'f2514f6b-ce7e-4e1a-8f6a-3ac5d524bb22']})
Run Code Online (Sandbox Code Playgroud)

这使 :

在此输入图像描述

这是我的代码,每次ID和比特率时都会获得一个唯一的日期列:

df = df.drop(['type', 'unique_id'], axis=1)
df.beginning_time = pd.to_datetime(df.beginning_time)
df.end_time = pd.to_datetime(df.end_time)
df = pd.melt(df, id_vars=['Id','bitrate'], value_name='dates').drop('variable', axis=1)
df.set_index('dates', inplace=True)
Run Code Online (Sandbox Code Playgroud)

这使 :

在此输入图像描述

现在,重新抽样的时间!这是我的代码:

print (df.groupby('Id').resample('1S').ffill())
Run Code Online (Sandbox Code Playgroud)

这就是结果:

在此输入图像描述

这正是我想要做的!我有38279个具有相同列的日志,当我做同样的事情时,我有一条错误消息.第一部分完美运作,并给出了:

在此输入图像描述

部分(df.groupby('Id').resample('1S').ffill())给出了以下错误消息:

ValueError: cannot reindex a non-unique index with a method or limit
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?Thnx!

python group-by resampling python-2.7 pandas

7
推荐指数
1
解决办法
9063
查看次数

如何为两列之间的所有日期添加行?

import pandas as pd

mydata = [{'ID' : '10', 'Entry Date': '10/10/2016', 'Exit Date': '15/10/2016'},
          {'ID' : '20', 'Entry Date': '10/10/2016', 'Exit Date': '18/10/2016'}]

mydata2 = [{'ID': '10', 'Entry Date': '10/10/2016', 'Exit Date': '15/10/2016', 'Date': '10/10/2016'},
           {'ID': '10', 'Entry Date': '10/10/2016', 'Exit Date': '15/10/2016', 'Date': '11/10/2016'},
           {'ID': '10', 'Entry Date': '10/10/2016', 'Exit Date': '15/10/2016', 'Date': '12/10/2016'},
           {'ID': '10', 'Entry Date': '10/10/2016', 'Exit Date': '15/10/2016', 'Date': '13/10/2016'},
           {'ID': '10', 'Entry Date': '10/10/2016', 'Exit Date': '15/10/2016', 'Date': '14/10/2016'},
           {'ID': '10', 'Entry Date': …
Run Code Online (Sandbox Code Playgroud)

python datetime resampling melt pandas

7
推荐指数
1
解决办法
1868
查看次数

重新采样 xarray 对象以降低空间分辨率

使用 xarray 重新采样以降低空间分辨率

我想将我的 xarray 对象重新采样到较低的空间分辨率(LESS PIXELS)。

import pandas as pd
import numpy as np
import xarray as xr

time = pd.date_range(np.datetime64('1998-01-02T00:00:00.000000000'), np.datetime64('2005-12-28T00:00:00.000000000'), freq='8D')
x = np.arange(1200)
y = np.arange(1200)

latitude = np.linspace(40,50,1200)
longitude = np.linspace(0,15.5572382,1200)

latitude, longitude = np.meshgrid(latitude, longitude)

BHR_SW = np.ones((365, 1200, 1200))

output_da = xr.DataArray(BHR_SW, coords=[time, y, x])
latitude_da = xr.DataArray(latitude, coords=[y, x])
longitude_da = xr.DataArray(longitude, coords=[y, x])

output_da = output_da.rename({'dim_0':'time','dim_1':'y','dim_2':'x'})
latitude_da = latitude_da.rename({'dim_0':'y','dim_1':'x'})
longitude_da = longitude_da.rename({'dim_0':'y','dim_1':'x'})

output_ds = output_da.to_dataset(name='BHR_SW')
output_ds = output_ds.assign({'latitude':latitude_da, 'longitude':longitude_da})

print(output_ds)

<xarray.Dataset> …
Run Code Online (Sandbox Code Playgroud)

python resampling netcdf python-xarray

7
推荐指数
2
解决办法
4468
查看次数

Pandas DataFrame 重新采样中出现意外数量的 bin

问题

我需要将 DataFrame 的长度减少到某个外部定义的整数(可能是两行、10,000 行等,但总长度会减少),但我也想保留生成的 DataFrame 代表原始数据. 原始 DataFrame(我们称之为df)有一个datetime列 ( utc_time) 和一个数据值列 ( data_value)。日期时间始终是连续的、不重复的,但间隔不均匀(即,数据可能“丢失”)。对于此示例中的 DataFrame,时间戳以十分钟为间隔(当数据存在时)。

尝试

为了实现这一点,我立即按照以下逻辑进行重采样:找到第一个和最后一个时间戳之间的秒数差,将其除以所需的最终长度,这就是重采样因子。我在这里设置:

# Define the desired final length.
final_length = 2
# Define the first timestamp.
first_timestamp = df['utc_time'].min().timestamp()
# Define the last timestamp.
last_timestamp = df['utc_time'].max().timestamp()
# Define the difference in seconds between the first and last timestamps.
delta_t = last_timestamp - first_timestamp
# Define the resampling factor.
resampling_factor = np.ceil(delta_t / final_length)

# Set the index from …
Run Code Online (Sandbox Code Playgroud)

python resampling dataframe python-3.x pandas

7
推荐指数
1
解决办法
193
查看次数

Pandas 时间序列重新采样,分箱似乎关闭

当我注意到这种奇怪的分箱时,我正在用我认为知道的有关大熊猫的一些东西回答另一个问题,即时间序列重采样。

假设我有一个包含每日日期范围索引的数据框和一个我想要重新采样和求和的列。

index = pd.date_range(start="1/1/2018", end="31/12/2018") 
df = pd.DataFrame(np.random.randint(100, size=len(index)), 
                  columns=["sales"], index=index)

>>> df.head()
            sales
2018-01-01     66
2018-01-02     18
2018-01-03     45
2018-01-04     92
2018-01-05     76
Run Code Online (Sandbox Code Playgroud)

现在我重新采样一个月,一切看起来都很好:

>>>df.resample("1M").sum()

            sales
2018-01-31   1507
2018-02-28   1186
2018-03-31   1382
[...]
2018-11-30   1342
2018-12-31   1337
Run Code Online (Sandbox Code Playgroud)

如果我尝试在更多个月内重新采样,尽管分箱开始出现问题。这一点尤其明显6M

df.resample("6M").sum()                                                           
            sales
2018-01-31   1507
2018-07-31   8393
2019-01-31   7283
Run Code Online (Sandbox Code Playgroud)

第一个 bin 跨越一个多月,最后一个 bin 跨度为一个月。也许我必须设置closed="left"以获得适当的限制:

df.resample("6M", closed="left").sum()                                            
            sales
2018-06-30   8090
2018-12-31   9054
2019-06-30     39
Run Code Online (Sandbox Code Playgroud)

现在我在 2019 年有一个额外的垃圾箱,里面有 2018-12-31 的数据......

这工作正常吗?我错过了我应该设置的任何选项吗?

编辑:这是我希望以六个月为间隔重新采样一年的输出,第一个间隔从 1 月 1 日到 6 月 30 …

python time-series resampling pandas

6
推荐指数
1
解决办法
606
查看次数