相关疑难解决方法(0)

移动平均线或平均线

是否有一个scipy函数或numpy函数或模块用于python,在给定特定窗口的情况下计算一维数组的运行平均值?

python numpy matplotlib scipy python-2.7

164
推荐指数
19
解决办法
29万
查看次数

从Python中的数据点查找移动平均值

我再次使用Python,我找到了一本带有例子的简洁书.其中一个例子是绘制一些数据.我有一个包含两列的.txt文件,我有数据.我把数据绘制得很好,但是在练习中它说:进一步修改程序以计算和绘制数据的运行平均值,定义如下:

$Y_k=\frac{1}{2r}\sum_{m=-r}^r y_{k+m}$
Run Code Online (Sandbox Code Playgroud)

其中r=5在此情况下(以及y_k在数据文件中的第二列).让程序在同一图表上绘制原始数据和运行平均值.

到目前为止我有这个:

from pylab import plot, ylim, xlim, show, xlabel, ylabel
from numpy import linspace, loadtxt

data = loadtxt("sunspots.txt", float)
r=5.0

x = data[:,0]
y = data[:,1]

plot(x,y)
xlim(0,1000)
xlabel("Months since Jan 1749.")
ylabel("No. of Sun spots")
show()
Run Code Online (Sandbox Code Playgroud)

那么如何计算总和呢?在Mathematica中它很简单,因为它是符号操作(例如Sum [i,{i,0,10}]),但是如何计算python中的sum,它取数据中的每十个点并对其进行平均,直到结束分数?

我看了看这本书,却发现没有什么可以解释这个:


heltonbiker的代码诀窍^^:D

from __future__ import division
from pylab import plot, ylim, xlim, show, xlabel, ylabel, grid
from numpy import linspace, loadtxt, ones, convolve
import numpy as numpy

data = loadtxt("sunspots.txt", float)

def movingaverage(interval, …
Run Code Online (Sandbox Code Playgroud)

python plot average sum

41
推荐指数
3
解决办法
8万
查看次数

NumPy版本的"指数加权移动平均线",相当于pandas.ewm().mean()

如何获得NumPy中的指数加权移动平均值,就像下面的熊猫一样

import pandas as pd
import pandas_datareader as pdr
from datetime import datetime

# Declare variables
ibm = pdr.get_data_yahoo(symbols='IBM', start=datetime(2000, 1, 1), end=datetime(2012, 1, 1)).reset_index(drop=True)['Adj Close']
windowSize = 20

# Get PANDAS exponential weighted moving average
ewm_pd = pd.DataFrame(ibm).ewm(span=windowSize, min_periods=windowSize).mean().as_matrix()

print(ewm_pd)
Run Code Online (Sandbox Code Playgroud)

我用NumPy尝试了以下内容

import numpy as np
import pandas_datareader as pdr
from datetime import datetime

# From this post: http://stackoverflow.com/a/40085052/3293881 by @Divakar
def strided_app(a, L, S): # Window len = L, Stride len/stepsize = S
    nrows = ((a.size - …
Run Code Online (Sandbox Code Playgroud)

python performance numpy vectorization pandas

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

加权移动平均线与numpy.convolve

我正在写一个移动平均函数,它使用numpy中的convolve函数,它应该等于a(加权移动平均值).当我的权重都相等时(如简单的算术平均值),它可以正常工作:

data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')
Run Code Online (Sandbox Code Playgroud)

array([ 3.,  4.,  5.,  6.,  7.,  8.])
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用加权平均值时

w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
Run Code Online (Sandbox Code Playgroud)

而不是(对于相同的数据)3.667,4.667,5.667,6.667,...我希望,我得到

array([ 2.33333333,  3.33333333,  4.33333333,  5.33333333,  6.33333333,
        7.33333333])
Run Code Online (Sandbox Code Playgroud)

如果我删除'有效'标志,我甚至看不到正确的值.我真的想使用卷积为WMA和MA,因为它使代码更清晰(相同的代码,不同的权重),否则我认为我将不得不遍历所有数据并采取切片.

关于这种行为的任何想法?

python math numpy

12
推荐指数
1
解决办法
8930
查看次数

每日数据,每3天重新采样一次,有效地计算过去5天

考虑一下 df

tidx = pd.date_range('2012-12-31', periods=11, freq='D')
df = pd.DataFrame(dict(A=np.arange(len(tidx))), tidx)
df
Run Code Online (Sandbox Code Playgroud)

我想计算一个过去5天,每3天的总和.

我期待看起来像这样的东西

在此输入图像描述

这被编辑
了我的错误.@ivan_pozdeev和@boud注意到这是一个居中的窗口,这不是我的意图.混淆的应用.
每个人的解决方案都捕获了我追求的大部分内容.


标准

  • 我正在寻找可以扩展到大型数据集的智能高效解决方案.

  • 我将提供解决方案并考虑优雅.

  • 解决方案也应该适用于各种样本和回溯频率.


来自评论

  • 我想要一个通用的解决方案来处理指定频率的回顾并抓住那些回头看的东西.
    • 对于上面的样本,回顾是,5D并且可能有4或50个观察属于该回顾.
  • 我希望时间戳是回顾期内最后观察到的时间戳.

python numpy pandas

12
推荐指数
3
解决办法
2289
查看次数

下面计算简单移动平均线的函数有什么问题?

我编写了下面的函数,以便根据所需的 SMA 公式查找 csv 文件的 SMA,但是,我的公式有问题,我无法弄清楚。

def SMA_calculation(t, w):
    s = np.size(t)
    g = np.zeros(s)
    for i in range(0, s):
        if i < w-1:
            g[i] = np.NaN
        else:
            g[i] = np.mean(t[i-w:i])
    return g
Run Code Online (Sandbox Code Playgroud)

python numpy moving-average

11
推荐指数
1
解决办法
364
查看次数

如何在Pandas的滚动窗口中计算波动率(标准差)

我有一个时间序列"Ser",我想用滚动窗口计算波动率(标准偏差).我当前的代码正确地以这种形式执行:

w=10
for timestep in range(length):
    subSer=Ser[timestep:timestep+w]
    mean_i=np.mean(subSer)
    vol_i=(np.sum((subSer-mean_i)**2)/len(subSer))**0.5
    volList.append(w_i)
Run Code Online (Sandbox Code Playgroud)

这在我看来非常低效.Pandas是否具有内置功能来执行此类操作?

python performance numpy pandas

8
推荐指数
4
解决办法
2万
查看次数

快速滚动

我正在寻找一种快速计算滚动总和的方法,可能使用Numpy.这是我的第一种方法:

 def func1(M, w):
     Rtn = np.zeros((M.shape[0], M.shape[1]-w+1))
     for i in range(M.shape[1]-w+1):
         Rtn[:,i] = np.sum(M[:, i:w+i], axis=1)
     return Rtn

 M = np.array([[0.,  0.,  0.,  0.,  0.,  1.,  1.,  0.,  1.,  1.,  1.,  0.,  0.],
               [0.,  0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.],
               [1.,  1.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.]])

 window_size = 4
 print func1(M, window_size)

 [[ 0.  0.  1.  2.  2.  3.  3.  3.  3.  2.]
  [ 1.  2. …
Run Code Online (Sandbox Code Playgroud)

python numpy sliding-window

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

取每 2 个连续元素的平均值并将它们插入回数组

我有一个数组,想要找到两个数字之间的平均值,并在两个数字之间添加一个附加元素。例如,如果我从

x = np.array([1, 3, 5, 7, 9])
Run Code Online (Sandbox Code Playgroud)

我想结束

[1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

python numpy

6
推荐指数
2
解决办法
1326
查看次数

在滑动窗口中求和元素 - NumPy

有一个numpy方法在区间中每三个元素做一个总和?例如:

import numpy as np
mydata = np.array([4, 2, 3, 8, -6, 10])
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

np.array([9, 13, 5, 12])
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
2
解决办法
3421
查看次数