带掩码的协方差矩阵-Python

带掩码的协方差矩阵-Python,python,numpy,covariance,Python,Numpy,Covariance,我正在使用np.ma模块计算两个重叠图像阵列的协方差,其中存在noData值。守则如下: import numpy as np arr1 = np.array([1638,1753,1601,1819,-9999,1627,1400,1379,1055]) arr2 = np.array([-9999,1455,1973,1330,1915,1842,1816,1218,-9999]) images = np.vstack((arr1.ravel(),arr2.ravel())) image

我正在使用np.ma模块计算两个重叠图像阵列的协方差,其中存在noData值。守则如下:

import numpy as np  
arr1 = np.array([1638,1753,1601,1819,-9999,1627,1400,1379,1055])
arr2 = np.array([-9999,1455,1973,1330,1915,1842,1816,1218,-9999])
images = np.vstack((arr1.ravel(),arr2.ravel()))
images =  np.ma.array(images , mask=images ==-9999)
cov_mat = np.ma.cov(images ,bias=True)
协方差矩阵的输出为:

[[53070.25 -8273.07142857143]
[-8273.07142857143 80860.40816326531]]
我对结果有一个问题,第一个值是使用arr1计算的,观察数等于8(因为只有一个noData值)。使用arr2计算最后一个值,但观测次数为7(两个noData值)


在计算协方差时,是否有方法指定cov函数仅获取最大的除法观测值,或者我必须手动执行该操作?

最大观测值是什么意思?如果您是指[1,1]处元素的8个观测值,那么它将是错误的,因为必须考虑屏蔽值。在计算协方差矩阵期间,公式规定除以观测值的数量。如果我们计算arr1 wrt本身的协方差,则观测的总数为8(因为偏差=真)。如果我们计算arr2 wrt本身的协方差,则观测的总数为7。我希望两个案例的观察总数保持不变。这在使用np.ma.cov时可能吗?是的,就像我在中展示的那样。如果您使用第二种调用方式,掩码将被扩展,以便在协方差计算中只考虑任何变量(图像)不存在掩码的元素。这就是您要寻找的答案吗?目前还不清楚这个问题是否得到解决。如果我的答案不是你想要的,其他人可能想尝试一下。谢谢你的回答。但我真正想要的是,即使在这两种方法中都对元素进行了掩蔽,在计算协方差的过程中,观测值的总数也要等于原始数,在我的例子中是9,而不是有效的有限元素数。