Python中1-d和3-d数组之间的协方差

时间:2017-01-11 15:35:30

标签: python numpy python-xarray

我有一个通过xarray创建的数据集及其指定的坐标和尺寸。从中获得,我还有两个变量:一维数组和三维数组,坐标与第一个相同,另外两个。我想在他们的共享坐标中获得两者的协方差" memb"对于由两个坐标定义的2-d空间中的每个点,两个坐标都不共享,并使其成为矩阵。

换句话说,变量由" memb"定义。另一个由" memb"," north_south"定义。和" west_east"。我想找到每个north_south和west_east点的memb协方差,并将其分配给一个变量,其值分配给每个north_south和west_east值。

要获得它,我可以运行以下代码并获得所需的结果:

numpy.cov(var_1,var_2.isel(north_south=1,west_east=1)[0][1]

我想将它分配给一个变量,该变量的尺寸为north_south和west_east。我想我知道如何使它适用于块,但是如何将它分配给每个点具有两个维度的变量?

1 个答案:

答案 0 :(得分:3)

方法apply_along_axis似乎合适。例如:

import numpy as np
a = np.random.uniform(size=(5,))
b = np.random.uniform(size=(5, 3, 2))
c = np.apply_along_axis(lambda x: np.cov(a, x)[0][1], 0, b)

此处c是一个大小为3乘2的二维数组。apply_along_axis的第二个参数指定b沿其工作的轴是第0轴(可能是另一个) ,只要它匹配1D数组a)的大小。 lambda只计算协方差,返回感兴趣的标量值。