我不清楚sklearn.gaussian_process.kernels中Matern内核的__call__函数是如何工作的.

from sklearn.gaussian_process.kernels import Matern
import numpy as np
import matplotlib.pyplot as plt

n = 51
x = np.linspace(0, 1, n)
kernel = Matern(length_scale=1, nu=1.5)
xx, yy = np.meshgrid(x, x)

# evaluate the kernel vectorially
k1 = kernel(xx, yy)

# evaluate the kernel with for loops
k2 = np.zeros([n, n])
for i in range(n):
    for j in range(n):
        k2[i, j] = kernel([[x[i]]], [[x[j]]])

plt.matshow(k1)
plt.matshow(k2)

enter image description here enter image description here

Edit:

我(几乎)通过使用

x_eval = np.array([x, x]).T
k1 = kernel(x_eval)

矢量化版本和基于循环的版本之间仍然存在一些不可忽略的差异.一些 idea 为什么?

enter image description here enter image description here enter image description here

Edit 2:

上面Edit中得到k1的代码是错误的,我用brew 的高斯核K(x_i, x_j) = exp(-(x_i - x_j)**2 / (2 * scale**2))的实现进行了判断,它与参数nu=np.inf的马特协方差相同.我获得的值与for循环版本一致,并且与另一个不同.

推荐答案

正确实施:

x_eval = np.reshape(x, [n, 1])
k1 = kernel(x_eval)

Python相关问答推荐

如何将Pydantic URL验证限制为特定主机或网站

使用pandas MultiIndex进行不连续 Select

从多行文本中提取事件对

如何修复fpdf中的线路出血

如何使用关键参数按列对Pandas rame进行排序

模型序列化器中未调用现场验证器

在matplotlib动画gif中更改配色方案

有条件地采样我的大型DF的最有效方法

根据给定日期的状态过滤查询集

根据条件将新值添加到下面的行或下面新创建的行中

Odoo 14 hr. emergency.public内的二进制字段

为什么符号没有按顺序添加?

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

如何在给定的条件下使numpy数组的计算速度最快?

如何让这个星型模式在Python中只使用一个for循环?

cv2.matchTemplate函数匹配失败

提取相关行的最快方法—pandas

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

如何在达到end_time时自动将状态字段从1更改为0

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同