这里举个论文中例子
tips:f1和f2是论文中的用GRF采样的函数
详细解释GRF以及最后的代码解释
代码实现如下:
import numpy as np
import matplotlib.pyplot as plt
"""
五个函数,每个函数100个点表示
GRF 样本的形状: (100, 5)
"""
# 定义高斯核(RBF核)函数
def rbf_kernel(x1, x2, length_scale=0.2):
return np.exp(-np.linalg.norm(x1 - x2) ** 2 / (2 * length_scale ** 2))
# 生成协方差矩阵K
def covariance_matrix(x, length_scale=0.2):
n = len(x)
K = np.zeros((n, n))
for i in range(n):
for j in range(n): # Kij=kl(xi,xj)
K[i, j] = rbf_kernel(x[i], x[j], length_scale)
return K
# 高斯随机场采样
def sample_grf(x, num_samples=5, length_scale=0.2):
K = covariance_matrix(x, length_scale)
L = np.linalg.cholesky(K + 1e-6 * np.eye(len(x))) # 稳定性调整
samples = np.dot(L, np.random.randn(len(x), num_samples)) # 生成多元高斯分布样本
return samples
"""
# 高斯过程采样的步骤
给定一组离散的 x 点(例如,100个均匀分布在 [0,1] 区间内的点)。
计算协方差矩阵 K,其中 Kij=kl(xi,xj)。
通过多元高斯分布采样得到随机函数 f。
"""
# 参数设置,100个均匀分布在 [0,1] 区间内的点
num_points = 100 # 空间/时间点的数量。
x = np.linspace(0, 1, num_points).reshape(-1, 1) # 定义 100 个等距点
num_samples = 5 # 采样的函数数量,也就是五个函数,每个函数100个点表示
length_scale = 0.2 # 高斯核的长度尺度
# 采样高斯随机场
# 输入采样点x,函数数量num_samples,l高斯核的长度尺度length_scale
grf_samples = sample_grf(x, num_samples, length_scale)
# 输出形状
print("GRF 样本的形状:", grf_samples.shape)
# 绘制结果
plt.figure(figsize=(8, 6))
for i in range(num_samples):
plt.plot(x, grf_samples[:, i], label=f"Sample {i + 1}")
plt.title("Samples from Gaussian Random Field")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.legend()
plt.show()
输出如下:
其中100个采样点和最终采样的5个函数分别为x和grf_samples变量