为2D numpy数组形成协方差矩阵

时间:2018-07-18 05:10:01

标签: python arrays numpy covariance gaussian

我正在尝试找到一种完全矢量化的方法,以便为给定的基本内核函数计算2D numpy数组的协方差矩阵。例如,如果对于内核函数X = [[a,b],[c,d]]的输入为k(x_1,x_2),则协方差矩阵将为

K=[[k(a,a),k(a,b),k(a,c),k(a,d)], [k(b,a),k(b,b),k(b,c),k(b,d)], [k(c,a),k(c,b),k(c,c),k(c,d)], [k(d,a),k(d,b),k(d,c),k(d,d)]]

我该如何去做?我对如何重复这些值然后应用该函数以及执行此操作的最有效方法感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用np.meshgrid来获得两个矩阵,这些矩阵的值分别为k函数的第一个和第二个参数。

In [8]: X = np.arange(4).reshape(2,2)    
In [9]: np.meshgrid(X, X)
Out[9]: 
[array([[0, 1, 2, 3],
        [0, 1, 2, 3],
        [0, 1, 2, 3],
        [0, 1, 2, 3]]), 
 array([[0, 0, 0, 0],
        [1, 1, 1, 1],
        [2, 2, 2, 2],
        [3, 3, 3, 3]])]

然后您可以将这些矩阵传递给k函数:

In [10]: k = lambda x1, x2: (x1-x2)**2

In [11]: X1, X2 = np.meshgrid(X, X)

In [12]: k(X1, X2)
Out[12]: 
array([[0, 1, 4, 9],
       [1, 0, 1, 4],
       [4, 1, 0, 1],
       [9, 4, 1, 0]])

答案 1 :(得分:1)

这是另一种方式

k(X.reshape(-1, 1), X.reshape(1, -1))