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

Covariance between a 1-d and a 3-d array in Python

我有一个通过 xarray 创建的数据集,它具有指定的坐标和维度。从中得到,我还有两个变量:一个一维数组和一个三维数组,与第一个和另外两个坐标相同。我想为二维 space 中的每个点获得它们共享坐标 "memb" 中的协方差,这两个点由两个不共享的坐标定义,并将其设为矩阵。

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

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

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

我想将其分配给一个维度为 north_south 和 west_east 的变量。我想我知道如何让它与块一起工作,但我如何将它分配给一个在每个点都有两个维度的变量?

方法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轴(可以是另一个,只要它匹配一维数组的大小 a)。 lambda 只是计算协方差,返回感兴趣的标量值。