我有一个函数来计算两个向量之间的点积,它在单个值下工作得非常好。
然而,当我试图用熊猫数据来向量化这个函数时,它会抛出一个值错误。
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)这工作:
find_dot_product(2, 6, 7, 9, 11,12)
# -29--这不起作用:
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))错误:
ValueError: shapes (2,10) and (2,10) not aligned: 10 (dim 1) != 2 (dim 0)发布于 2020-09-03 07:40:13
我认为np.dot不能很好地处理缺失的值,所以您可以使用:
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验证最后一行:
print (find_dot_prod(7, 7, 18, 9, 12,5))
74https://stackoverflow.com/questions/63718197
复制相似问题