numpy.corrcoeff() MemoryError



无法理解 MemoryError 我使用 numpy.corrcoeff(( 找到 2 个向量之间的相关系数sminsmax如下:

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)

如果有另一种方法可以找到相关性系数,比如使用熊猫也很好。

这里的数组形状是问题所在。函数文档指出 x 是一个"包含多个变量和观测值的一维或二维数组。每行x代表一个变量,每列是所有这些变量的单个观测值",而y是一组额外的变量和观测值。所以这是试图分配一个大小的数组(10000、10000(,这是巨大的。

如果您只想计算两个一维向量之间的皮尔逊相关系数,则可以使用比此处实现的更简单的公式。本文档包含我所指的公式。

https://hydroerr.readthedocs.io/en/stable/api/HydroErr.HydroErr.pearson_r.html#HydroErr.HydroErr.pearson_r

但是为了能够仍然使用 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]

有关此内容的更多解释 这里.

最新更新