2017-01-11 56 views
2

我有一個通過xarray創建的數據集及其指定的座標和尺寸。由此得出,我也有兩個變量:一維數組和三維數組,具有與第一個和另外兩個相同的座標。我想在兩個座標所定義的二維空間中的每個點的共享座標「memb」中獲得兩者都不共享的兩者的協方差,並將它們作爲矩陣。Python中的1-d和3-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的變量。我想我知道如何使它適用於塊,但我如何將它分配給每個點上具有兩個維度的變量?

回答

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這裏是2大小3的2D陣列的apply_along_axis第二參數指定的b軸線沿其工作是第0軸(可以是一個又一個,只要它匹配1D陣列的尺寸爲a)。 lambda只計算協方差,返回感興趣的標量值。

相關問題