首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy点乘积的矢量化值误差

numpy点乘积的矢量化值误差
EN

Stack Overflow用户
提问于 2020-09-03 06:43:36
回答 1查看 36关注 0票数 0

我有一个函数来计算两个向量之间的点积,它在单个值下工作得非常好。

然而,当我试图用熊猫数据来向量化这个函数时,它会抛出一个值错误。

代码语言:javascript
复制
def find_dot_prod(pt1, pt2, pt3, pt4, pt5, pt6):
    a = np.array([pt1, pt2])
    b = np.array([pt3, pt4])
    c = np.array([pt5, pt6])
    
    ba = a - b
    bc = c - b

    return np.dot(ba,bc)

这工作:

代码语言:javascript
复制
find_dot_product(2, 6, 7, 9, 11,12)
# -29

--这不起作用:

代码语言:javascript
复制
df= pd.DataFrame({'pt1':[4,5,6,7,9,8,1,12,18,7],'pt2':[9,4,3,5,11,14,15,5,9,7]})
df['dot_prod'] = find_dot_product(df['pt1'], df['pt2'],
                       df['pt1'].shift(), df['pt2'].shift(),
                       df['pt1'].shift(2), df['pt2'].shift(2))

错误:

代码语言:javascript
复制
ValueError: shapes (2,10) and (2,10) not aligned: 10 (dim 1) != 2 (dim 0)
EN

回答 1

Stack Overflow用户

发布于 2020-09-03 07:40:13

我认为np.dot不能很好地处理缺失的值,所以您可以使用:

代码语言:javascript
复制
def find_dot_prod(pt1, pt2, pt3, pt4, pt5, pt6):
    a = np.array([pt1, pt2])
    b = np.array([pt3, pt4])
    c = np.array([pt5, pt6])
    
    ba = a - b
    bc = c - b

    return  np.nansum(ba * bc, axis=0)


df= pd.DataFrame({'pt1':[4,5,6,7,9,8,1,12,18,7],'pt2':[9,4,3,5,11,14,15,5,9,7]})
df['dot_prod']  = find_dot_prod(df['pt1'], df['pt2'],
                       df['pt1'].shift(), df['pt2'].shift(),
                       df['pt1'].shift(2), df['pt2'].shift(2))

print (df)
   pt1  pt2  dot_prod
0    4    9       0.0
1    5    4       0.0
2    6    3      -6.0
3    7    5       1.0
4    9   11     -14.0
5    8   14     -16.0
6    1   15     -10.0
7   12    5      87.0
8   18    9     -26.0
9    7    7      74.0

验证最后一行:

代码语言:javascript
复制
print (find_dot_prod(7, 7, 18, 9, 12,5))
74
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63718197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档