缺少值的numpy点积

缺少值的numpy点积,numpy,multidimensional-array,linear-algebra,numpy-ndarray,dot-product,Numpy,Multidimensional Array,Linear Algebra,Numpy Ndarray,Dot Product,在两个向量可能缺少值的情况下,如何进行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)) 在元素相乘之后,我们可以使用忽略NaNs的值求和- np.nansum(v1*v2) 样本运行- In [109]: v1 Out[10

在两个向量可能缺少值的情况下,如何进行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))
在元素相乘之后,我们可以使用忽略
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)

但是,当我传入一个熊猫系列时,我得到了以下错误,我的答案没有得到:
TypeError:“series”对象不能被解释为整数
@AllenWang Add-in示例熊猫系列?Nvm,我认为这是一个输入错误