Python - 生成特定自相关数组
Python - generate array of specific autocorrelation
我有兴趣生成一个长度为 N 的数组(或 numpy 系列),它将在滞后 1 时表现出特定的自相关。理想情况下,我还想指定均值和方差,并从 (多)正态分布。但最重要的是,我想指定自相关。我如何使用 numpy 或 scikit-learn 执行此操作?
为了明确和准确,这是我要控制的自相关:
numpy.corrcoef(x[0:len(x) - 1], x[1:])[0][1]
如果你只对滞后的自相关感兴趣,你可以生成一个auto-regressive process of order one with the parameter equal to the desired auto-correlation; this property is mentioned on the Wikipedia page,但不难证明。
下面是一些示例代码:
import numpy as np
def sample_signal(n_samples, corr, mu=0, sigma=1):
assert 0 < corr < 1, "Auto-correlation must be between 0 and 1"
# Find out the offset `c` and the std of the white noise `sigma_e`
# that produce a signal with the desired mean and variance.
# See https://en.wikipedia.org/wiki/Autoregressive_model
# under section "Example: An AR(1) process".
c = mu * (1 - corr)
sigma_e = np.sqrt((sigma ** 2) * (1 - corr ** 2))
# Sample the auto-regressive process.
signal = [c + np.random.normal(0, sigma_e)]
for _ in range(1, n_samples):
signal.append(c + corr * signal[-1] + np.random.normal(0, sigma_e))
return np.array(signal)
def compute_corr_lag_1(signal):
return np.corrcoef(signal[:-1], signal[1:])[0][1]
# Examples.
print(compute_corr_lag_1(sample_signal(5000, 0.5)))
print(np.mean(sample_signal(5000, 0.5, mu=2)))
print(np.std(sample_signal(5000, 0.5, sigma=3)))
参数 corr
可让您在滞后 1 处设置所需的自相关,可选参数 mu
和 sigma
可让您控制生成的信号。
我有兴趣生成一个长度为 N 的数组(或 numpy 系列),它将在滞后 1 时表现出特定的自相关。理想情况下,我还想指定均值和方差,并从 (多)正态分布。但最重要的是,我想指定自相关。我如何使用 numpy 或 scikit-learn 执行此操作?
为了明确和准确,这是我要控制的自相关:
numpy.corrcoef(x[0:len(x) - 1], x[1:])[0][1]
如果你只对滞后的自相关感兴趣,你可以生成一个auto-regressive process of order one with the parameter equal to the desired auto-correlation; this property is mentioned on the Wikipedia page,但不难证明。
下面是一些示例代码:
import numpy as np
def sample_signal(n_samples, corr, mu=0, sigma=1):
assert 0 < corr < 1, "Auto-correlation must be between 0 and 1"
# Find out the offset `c` and the std of the white noise `sigma_e`
# that produce a signal with the desired mean and variance.
# See https://en.wikipedia.org/wiki/Autoregressive_model
# under section "Example: An AR(1) process".
c = mu * (1 - corr)
sigma_e = np.sqrt((sigma ** 2) * (1 - corr ** 2))
# Sample the auto-regressive process.
signal = [c + np.random.normal(0, sigma_e)]
for _ in range(1, n_samples):
signal.append(c + corr * signal[-1] + np.random.normal(0, sigma_e))
return np.array(signal)
def compute_corr_lag_1(signal):
return np.corrcoef(signal[:-1], signal[1:])[0][1]
# Examples.
print(compute_corr_lag_1(sample_signal(5000, 0.5)))
print(np.mean(sample_signal(5000, 0.5, mu=2)))
print(np.std(sample_signal(5000, 0.5, sigma=3)))
参数 corr
可让您在滞后 1 处设置所需的自相关,可选参数 mu
和 sigma
可让您控制生成的信号。