2

我有一个通过 xarray 创建的数据集,其分配的坐标和维度。从中获得,我也有两个变量:一维数组和一个 3 维数组,与第一个和两个附加的坐标相同。对于由两个坐标定义的二维空间中的每个点,我想在它们的共享坐标“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]

我想将其分配给一个变量,该变量将具有北南和西东的维度。我想我知道如何使它与块一起使用,但是如何将它分配给每个点都有两个维度的变量?

4

1 回答 1

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 x 2 的 2D 数组。 的第二个参数apply_along_axis指定要b沿其工作的轴是第 0 个轴(可以是另一个轴,只要它与 1D 数组的大小匹配a)。lambda 只计算协方差,返回感兴趣的标量值。

于 2017-01-11T18:13:51.523 回答