我有一个通过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。我想我知道如何使它适用于块,但是如何将它分配给每个点具有两个维度的变量?
答案 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只计算协方差,返回感兴趣的标量值。