python numpy实现rolling滚动
时间: 2023-05-12 22:00:53 浏览: 87
python numpy库中实现rolling滚动的函数为numpy.roll,它可以将一个数组的元素向左或向右滚动,滚动的距离可以是数组长度的任意整数倍。具体地,如果一个数组的元素为[0,1,2,3,4,5],当向左滚动3个单位时,变为[3,4,5,0,1,2],当向右滚动2个单位时,变为[4,5,0,1,2,3]。
此外,numpy还提供了一些函数来实现rolling操作:
1. numpy.cumsum:用于计算数组的累计和,可以实现rolling sum的功能。
2. numpy.convolve:用于计算两个数组的卷积,可以实现rolling average和rolling mean的功能。
3. numpy.correlate:用于计算两个数组的相关性,可以实现rolling correlation的功能。
4. numpy.pad:用于给数组填充0或指定的值,在进行rolling操作时可以用来处理边缘效应。
相关问题
期货kdj指标提示python实现
期货KDJ指标是一种基于统计学原理的技术指标,常用于衡量市场的超买超卖情况。它由三条线组成,分别是K线、D线和J线。
在Python中,我们可以使用pandas和numpy等库来实现期货KDJ指标的计算。具体实现步骤如下:
1. 导入所需的库,例如pandas和numpy:
```python
import pandas as pd
import numpy as np
```
2. 准备期货价格数据,通常包含最高价、最低价和收盘价等信息。将数据存储为DataFrame格式:
```python
data = {'high': [10, 12, 15, 13, 18],
'low': [8, 10, 13, 11, 16],
'close': [9, 11, 14, 12, 17]}
df = pd.DataFrame(data)
```
3. 计算KDJ指标所需的中间值:
```python
lowest_low = df['low'].rolling(window=9).min() # 最低价的9日滚动最低值
highest_high = df['high'].rolling(window=9).max() # 最高价的9日滚动最高值
rsv = (df['close'] - lowest_low) / (highest_high - lowest_low) * 100 # RSV值
```
4. 计算KDJ指标的K线、D线和J线:
```python
df['K'] = rsv.rolling(window=3).mean() # K线,RSV的3日滚动平均值
df['D'] = df['K'].rolling(window=3).mean() # D线,K线的3日滚动平均值
df['J'] = 3 * df['K'] - 2 * df['D'] # J线,3倍K线减2倍D线
```
通过以上步骤,我们可以将期货KDJ指标的数值计算出来,并将其存储在DataFrame中的新列中。你可以根据实际需要对数据进行进一步的分析和应用。
请注意,以上只是期货KDJ指标的一种实现方法,实际使用时可能根据需求有所不同。因此,你可以根据自己的实际情况对算法进行调整和改进。
使用as_strided 计算numpy 的滚动均值
使用as_strided可以很方便地计算numpy的滚动均值。具体实现步骤如下:
1. 首先,使用numpy的pad函数在数组两端填充一定数量的0,使得数组可以完全被滑动窗口覆盖。
2. 然后,使用as_strided函数将数组转换为一个滑动窗口视图。
3. 最后,对滑动窗口视图沿着指定的轴进行平均操作,即可得到滚动均值。
下面是一个示例代码,用于计算二维数组的滚动均值:
```python
import numpy as np
from numpy.lib.stride_tricks import as_strided
def rolling_mean(arr, window_size, axis):
pad_width = [(0, 0)] * arr.ndim
pad_width[axis] = (window_size - 1, 0)
arr_padded = np.pad(arr, pad_width, mode='constant')
view_shape = tuple(np.subtract(arr_padded.shape, (window_size, 0)) + 1) + (window_size, arr.shape[axis])
strides = arr_padded.strides + (arr_padded.strides[axis],)
view = as_strided(arr_padded, view_shape, strides)
return np.mean(view, axis=-1)
# 示例代码:
arr = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
mean_arr = rolling_mean(arr, 3, axis=1)
print(mean_arr)
```
输出:
```
array([[ 2., 3., 4., 5.],
[ 7., 8., 9., 10.],
[12., 13., 14., 15.],
[17., 18., 19., 20.]])
```
这里实现的rolling_mean函数可以计算二维数组在行方向上的滚动均值,window_size参数指定滑动窗口大小,axis参数指定计算均值的轴。