วิธีคำนวณระยะห่างแบบยูคลิดของอาร์เรย์ตัวเลขสองอาร์เรย์โดยการแพร่ภาพ [ซ้ำกัน]

Aug 16 2020

ฉันต้องการคำนวณระยะห่างแบบยูคลิดของอาร์เรย์ตัวเลขสองตัว

แต่ละแถวในอาร์เรย์เป็นเวกเตอร์

เช่น

a = np.array([125, 20, 210, 55], [11, 97, 111, 71])
b = np.array([51, 19, 35, 65], [59, 80, 37, 60])

ฉันต้องการคำนวณระยะห่างแบบยูคลิดของแต่ละแถวในแต่ละแถวใน b

ขนาดจริงของอาร์เรย์อาจมีขนาดใหญ่ถึง 5,000 แถวและ 4000 คอลัมน์

ฉันรู้วิธีทำโดยสอง for-loops และอีกหนึ่ง for-loop ฉันต้องการแก้โดยใช้อาร์เรย์ numpy แบบเวกเตอร์ เช่นกระจายอาร์เรย์ไปยังอีกอันหนึ่งเช่นhttps://numpy.org/devdocs/user/theory.broadcasting.html

โดยไม่ต้องใช้

 spatial.distance.cdist

แต่ฉันคิดไม่ออกว่าจะทำอย่างไร

ความช่วยเหลือใด ๆ จะได้รับการชื่นชม

คำตอบ

AagamSheth Aug 16 2020 at 13:03
import numpy as np

np.sqrt((np.square(a[:,np.newaxis] - b).sum(axis=2)))