具有缺失值的 numpy 点积
numpy dot product with missing values
你如何计算两个向量可能有缺失值的 numpy 点积?这似乎需要很多额外的步骤,有没有更简单的方法来做到这一点?:
v1 = np.array([1,4,2,np.nan,3])
v2 = np.array([np.nan,np.nan,2,4,1])
np.where(np.isnan(v1),0,v1).dot(np.where(np.isnan(v2),0,v2))
我们可以使用 np.nansum
来求和忽略 NaNs
之后的元素乘法 -
np.nansum(v1*v2)
样本运行-
In [109]: v1
Out[109]: array([ 1., 4., 2., nan, 3.])
In [110]: v2
Out[110]: array([ nan, nan, 2., 4., 1.])
In [111]: np.where(np.isnan(v1),0,v1).dot(np.where(np.isnan(v2),0,v2))
Out[111]: 7.0
In [115]: v1*v2
Out[115]: array([ nan, nan, 4., nan, 3.])
In [116]: np.nansum(v1*v2)
Out[116]: 7.0
另一个解决方案是使用掩码数组:
v1 = np.array([1,4,2,np.nan,3])
v2 = np.array([np.nan,np.nan,2,4,1])
v1_m = numpy.ma.array(v1, mask=numpy.isnan(v1))
v2_m = numpy.ma.array(v2, mask=numpy.isnan(v2))
numpy.ma.dot(v1_m, v2_m)
你如何计算两个向量可能有缺失值的 numpy 点积?这似乎需要很多额外的步骤,有没有更简单的方法来做到这一点?:
v1 = np.array([1,4,2,np.nan,3])
v2 = np.array([np.nan,np.nan,2,4,1])
np.where(np.isnan(v1),0,v1).dot(np.where(np.isnan(v2),0,v2))
我们可以使用 np.nansum
来求和忽略 NaNs
之后的元素乘法 -
np.nansum(v1*v2)
样本运行-
In [109]: v1
Out[109]: array([ 1., 4., 2., nan, 3.])
In [110]: v2
Out[110]: array([ nan, nan, 2., 4., 1.])
In [111]: np.where(np.isnan(v1),0,v1).dot(np.where(np.isnan(v2),0,v2))
Out[111]: 7.0
In [115]: v1*v2
Out[115]: array([ nan, nan, 4., nan, 3.])
In [116]: np.nansum(v1*v2)
Out[116]: 7.0
另一个解决方案是使用掩码数组:
v1 = np.array([1,4,2,np.nan,3])
v2 = np.array([np.nan,np.nan,2,4,1])
v1_m = numpy.ma.array(v1, mask=numpy.isnan(v1))
v2_m = numpy.ma.array(v2, mask=numpy.isnan(v2))
numpy.ma.dot(v1_m, v2_m)