Fahmy Mostafa نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 لدي نقطتين كالتالي: (a, b, c) (x, y, z) وأريد أن أقوم بحساب المسافة بين النقطتين كالتالي: dist = sqrt((a-x)^2 + (b-y)^2 + (c-z)^2) كيف يمكنني حساب المسافة بين النقطتين باستخدام numpy فقط؟ import numpy point1 = numpy.array((a, b, c)) point2 = numpy.array((x, y, z)) 1 اقتباس
1 Ali Haidar Ahmad نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 (معدل) إضافة إلى الطرق التي قدمها الأستاذ وائل. سأضيف لك طريقة هي الأسرع، حيث أنه يوجد العديد من الطرق لحسابها في بايثون و الفرق بينهم هو التعقيد الزمني. حيث يتم استخدام الدالة (Einstein’s summation)einsum كالتالي: import numpy as np point1 = numpy.array((2, 1, 2)) point2 = numpy.array((2, 1, 2)) # التابع التالي سيحسب لك المسافة من أجل نقاط أحادية وثنائية وثلاثية الأبعاد def dist(p1, p2, metric='euclidean'): p1 = np.asarray(p1) p2 = np.atleast_2d(p2) p1_dim = p1.ndim p2_dim = p2.ndim if p1_dim == 1: p1 = p1.reshape(1, 1, p1.shape[0]) if p1_dim >= 2: p1 = p1.reshape(np.prod(p1.shape[:-1]), 1, p1.shape[-1]) if p2_dim > 2: p2 = p2.reshape(np.prod(p2.shape[:-1]), p2.shape[-1]) diff = p1 - p2 dist_arr = np.einsum('ijk,ijk->ij', diff, diff) if metric[:1] == 'e': dist_arr = np.sqrt(dist_arr) dist_arr = np.squeeze(dist_arr) return dist_arr dist(point1,point2) # array(0.) لاحظ التعقيد كيف يختلف من طريقة لأخرى. تم التعديل في 25 يونيو 2021 بواسطة Ali Haidar Ahmad 3 اقتباس
1 Wael Aljamal نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 يمكن باستخدام الدالة linalg.norm import numpy point1 = numpy.array((a, b, c)) point2 = numpy.array((x, y, z)) dist = numpy.linalg.norm(point1-point2) أو عن طريق dot: temp = point1 - point2 sum_sq = np.dot(temp.T, temp) print(np.sqrt(sum_sq)) هذه هي الطرق للحساب في Euclidean distance 1 اقتباس
السؤال
Fahmy Mostafa
لدي نقطتين كالتالي:
وأريد أن أقوم بحساب المسافة بين النقطتين كالتالي:
كيف يمكنني حساب المسافة بين النقطتين باستخدام numpy فقط؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.