numpy.corrcoff()内存错误

numpy.corrcoff()内存错误,numpy,vector,correlation,Numpy,Vector,Correlation,无法理解使用numpy.corrcoff()查找两个向量smin和smax之间的相关系数时得到的内存错误,如下所示: import numpy as np from numpy import random as rn r=0.01 sigma=0.2 T=1 K=1 N=252 h=T/N M = 50000 Z = rn.randn(M,N) S=np.ones((M,N+1)) smax=np.ones((M,1)) smin=np.ones((M,1)) for i in range(

无法理解使用numpy.corrcoff()查找两个向量
smin
smax
之间的相关系数时得到的内存错误,如下所示:

import numpy as np
from numpy import random as rn
r=0.01
sigma=0.2
T=1
K=1
N=252
h=T/N 
M  = 50000
Z = rn.randn(M,N)
S=np.ones((M,N+1))
smax=np.ones((M,1))
smin=np.ones((M,1))
for i in range(0,N):
    S[:,i+1]=S[:,i]*(np.exp((r-(sigma**2)/2)*h+sigma*Z[:,i]*np.sqrt(h)))
for j in range(0,M):
    smax[j,:]=np.exp(-r*T)*(np.max(S[j,:])>K)*(np.max(S[j,:])-K)
    smin[j,:]=np.exp(-r*T)*(np.min(S[j,:])<K)*(K-np.min(S[j,:]))
c=np.corrcoef(smax,smin)
print(c)
将numpy导入为np
从numpy随机导入为rn
r=0.01
西格玛=0.2
T=1
K=1
N=252
h=T/N
M=50000
Z=rn.randn(M,N)
S=np.one((M,N+1))
smax=np.one((M,1))
smin=np.one((M,1))
对于范围(0,N)内的i:
S[:,i+1]=S[:,i]*(np.exp((r-(sigma**2)/2)*h+sigma*Z[:,i]*np.sqrt(h)))
对于范围(0,M)内的j:
smax[j,:]=np.exp(-r*T)*(np.max(S[j,:])>K)*(np.max(S[j,:])-K)

smin[j,:]=np.exp(-r*T)*(np.min(S[j,:])这里的数组形状就是问题所在。表示x是“包含多个变量和观测值的一维或二维数组。x的每一行表示一个变量,每一列表示所有这些变量的单个观测值。”y是一组额外的变量和观测值,所以这是试图分配一个大小为(10000,10000)的数组,这是一个巨大的数组

如果你只想计算两个一维向量之间的皮尔逊相关系数,你可以使用一个比这里实现的简单得多的公式

但是为了仍然能够使用numpy版本,您需要在相同的参数x中传递观测和预测,并且x和y需要是1D数组

import numpy as np

simulated_array = np.random.rand(50000)
observed_array = np.random.rand(50000)

c = np.corrcoef([simulated_array, observed_array])[1, 0]

更多解释。

这里的数组形状就是问题所在。表示x是“包含多个变量和观测值的一维或二维数组。x的每一行表示一个变量,每一列表示所有这些变量的单个观测值。”y是一组额外的变量和观测值,所以这是试图分配一个大小为(10000,10000)的数组,这是一个巨大的数组

如果你只想计算两个一维向量之间的皮尔逊相关系数,你可以使用一个比这里实现的简单得多的公式

但是为了仍然能够使用numpy版本,您需要在相同的参数x中传递观测和预测,并且x和y需要是1D数组

import numpy as np

simulated_array = np.random.rand(50000)
observed_array = np.random.rand(50000)

c = np.corrcoef([simulated_array, observed_array])[1, 0]
对此有更多的解释