اذهب إلى المحتوى
  • 0

حساب المسافة بين نقطتين في نظام ثلاثي الأبعاد باستخدام numpy

Fahmy Mostafa

السؤال

لدي نقطتين كالتالي:

(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))

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

إضافة إلى الطرق التي قدمها الأستاذ وائل.
سأضيف لك طريقة هي الأسرع، حيث أنه يوجد العديد من الطرق لحسابها في بايثون و الفرق بينهم هو التعقيد الزمني.
حيث يتم استخدام الدالة (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.)

لاحظ التعقيد كيف يختلف من طريقة لأخرى.Untitled.thumb.png.4597432731270eb6df4cdfc32ade4f98.png

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكن باستخدام الدالة 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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...