Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算三维锯齿状NumPy阵列的二维平均值_Python_Multidimensional Array_Mean_Exponent_Quantitative Finance - Fatal编程技术网

Python 计算三维锯齿状NumPy阵列的二维平均值

Python 计算三维锯齿状NumPy阵列的二维平均值,python,multidimensional-array,mean,exponent,quantitative-finance,Python,Multidimensional Array,Mean,Exponent,Quantitative Finance,我试图用python计算时间序列的Hurst指数,这个值决定了定量金融时间序列的一些均值回归特征。我选取了任意长度的时间序列,并选择将其分割成数据块,这是计算赫斯特指数(几种方法之一)的一部分。我把它写成函数。假设我的时间序列(证券价格)为“y”,而我想要的块数为“n”: 问题是现在数组被分成了块,其中一个块的大小与其他块的大小不相等。我想找到平均值,标准偏差,以平均值为中心的序列,以平均值为中心的序列的累积和,以及每个块的累积和的范围。但是由于数组的大小不一致,我还没有找到一种方法来实现这一点

我试图用python计算时间序列的Hurst指数,这个值决定了定量金融时间序列的一些均值回归特征。我选取了任意长度的时间序列,并选择将其分割成数据块,这是计算赫斯特指数(几种方法之一)的一部分。我把它写成函数。假设我的时间序列(证券价格)为“y”,而我想要的块数为“n”:

问题是现在数组被分成了块,其中一个块的大小与其他块的大小不相等。我想找到平均值,标准偏差,以平均值为中心的序列,以平均值为中心的序列的累积和,以及每个块的累积和的范围。但是由于数组的大小不一致,我还没有找到一种方法来实现这一点。基本上当我试图通过的时候

mean(y,axis=0)
或者1或2,对于轴,我得到一个误差。当使用n=20时,数组的形状如下所示

(20,)
我想也许“矢量化”能帮我?但我还没想好如何使用它。我试图避免在数据中循环

拆分后的示例数据:

[array([[ 1.04676],
   [ 1.0366 ],
   [ 1.0418 ],
   [ 1.0536 ],
   [ 1.0639 ],
   [ 1.06556],
   [ 1.0668 ]]), array([[ 1.056  ],
   [ 1.053  ],
   [ 1.0521 ],
   [ 1.0517 ],
   [ 1.0551 ],
   [ 1.0485 ],
   [ 1.05705]]), array([[ 1.0531],
   [ 1.0545],
   [ 1.0682],
   [ 1.08  ],
   [ 1.0728],
   [ 1.061 ],
   [ 1.0554]]), array([[ 1.0642],
   [ 1.0607],
   [ 1.0546],
   [ 1.0521],
   [ 1.0548],
   [ 1.0647],
   [ 1.0604]])

数据类型
list

要列出平均值,您只需使用:


它跨越轴并计算每个部分的平均值。

对于任何偶然发现这一点的人,我已经解决了这个问题,并决定使用熊猫数据帧来代替

def hurst(y,n):

y = prices.as_matrix()
y = array_split(y,n)
y = pd.DataFrame.from_records(y).transpose()
y = y.dropna()

# Mean Centered Series

m = y.mean(axis='columns')

Y = y.sub(m,axis = 'rows')


# Standard Deviation of Series

S = y.std(axis='columns')

# Cumulative Sum Series

Z = Y.cumsum()

# Range Series

R = Z.max(axis='columns')-Z.min(axis='columns')

# Rescale Range

RS = R/S
RS = RS.sort_values()

# Time Period

s = shape(y)

t = linspace(1,s[0],s[0])

# Log Scales

logt = log10(t)
logRS = log10(RS)

print len(t),len(logRS)

# Regression Fit

slope, intercept, r_value, p_value, std_err = stats.mstats.linregress(logt, logRS)

# Hurst Exponent

H = slope/2

return H, logt, logRS

什么类型是
y
?请提供一个简单数据
y
作为数据帧开始的示例。然后我使用
作为矩阵
将其转换为数组形式。然后我在上面使用“array\u split”。我猜最后的形式是
列表
。我对python很陌生如果你想知道变量
a
的类型,你可以使用
print(type(a))
我试过这个,但是它只返回索引块的平均值,对吗?在这种情况下,它只为索引为0的块返回一个值?我需要列表形式的每个块的平均值。@user22393我为您更改它。但是您确实需要知道您使用的是什么类型。我必须将数据分割成不同的数据块,这些数据块可能不相等,具体取决于时间序列的总长度。将数据分割成不均匀的块比生成
列表
类型的
数组分割
更好吗?
    [mean(x[axis]) for axis in range(len(x))]
def hurst(y,n):

y = prices.as_matrix()
y = array_split(y,n)
y = pd.DataFrame.from_records(y).transpose()
y = y.dropna()

# Mean Centered Series

m = y.mean(axis='columns')

Y = y.sub(m,axis = 'rows')


# Standard Deviation of Series

S = y.std(axis='columns')

# Cumulative Sum Series

Z = Y.cumsum()

# Range Series

R = Z.max(axis='columns')-Z.min(axis='columns')

# Rescale Range

RS = R/S
RS = RS.sort_values()

# Time Period

s = shape(y)

t = linspace(1,s[0],s[0])

# Log Scales

logt = log10(t)
logRS = log10(RS)

print len(t),len(logRS)

# Regression Fit

slope, intercept, r_value, p_value, std_err = stats.mstats.linregress(logt, logRS)

# Hurst Exponent

H = slope/2

return H, logt, logRS