亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

兩個 Numpy 數組之間的點積和角度(以度為單位)

兩個 Numpy 數組之間的點積和角度(以度為單位)

臨摹微笑 2023-12-26 14:58:48
我想編寫一個函數,它接受兩個長度相同的 numpy 數組并返回:兩個數組的點積兩個向量之間的角度(以度為單位)預期輸出如下:print(angle_dot(np.array([0., 1.]), np.array([1., 0.])))## (0.0, 90.0)print(angle_dot(np.array([2., -1, 1, -2]), np.array([-1., 1.5, 3., 1])))## (-2.5, 102.5)這是我到目前為止所擁有的,我似乎無法獲得正確的數組之間的角度值。import numpy as npdef angle_dot(a, b):    dot_product = round(np.dot(a, b), 1)    angle = round(np.degrees(dot_product), 1)    return dot_product, angleprint(angle_dot(np.array([0., 1.]), np.array([1., 0.])))## (0.0, 0.0)print(angle_dot(np.array([2., -1, 1, -2]), np.array([-1., 1.5, 3., 1])))## (-2.5, -143.2)
查看完整描述

2 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

使用以下公式定義角度(這只是定義它的一種方法):


cos(alpha) = (a . b) / (|a| * |b|)

所以,角度為:


alpha = arccos((a . b) / (|a| * |b|))

代碼:


import numpy as np


def angle_dot(a, b):

    dot_product = np.dot(a, b)

    prod_of_norms = np.linalg.norm(a) * np.linalg.norm(b)

    angle = round(np.degrees(np.arccos(dot_product / prod_of_norms)), 1)

    return round(dot_product, 1), angle


print(angle_dot(np.array([0., 1.]), np.array([1., 0.])))


print(angle_dot(np.array([2., -1, 1, -2]), np.array([-1., 1.5, 3., 1])))

輸出:


(0.0, 90.0)

(-2.5, 102.5)


查看完整回答
反對 回復 2023-12-26
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

使用點積求 2 個 n 維數組之間的角度的公式為:


dot(a, b) = ||a|| * ||b|| * cos(theta)

theta = arccos( dot(a, b) / (||a|| * ||b||))

或者在 numpy 中:


def angle(a, b):

    return np.degrees(np.arccos(np.dot(a, b)/ (np.linalg.norm(a) * np.linalg.norm(b))))


查看完整回答
反對 回復 2023-12-26
  • 2 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號