حساب النوم للمتجهات أمر ضروري في كل من الذكاء الاصطناعي والحوسبة الكمية لمهام مثل القياس، التأثير، مقاييس المسافة، معايير التقارب، تمثيل الحالات الكمية، تأكيد الوحدانية للعمليات، تصحيح الأخطاء، وتصميم خوارزميات ودوائر كمية.
ستتعلم كيفية حساب الإقليدي (النوم/المسافة)، المعروف أيضاً بنظام النوم L2، لموتر أحادي البعد (1D) في مكتبات بايثون مثل NumPy، SciPy، Scikit-Learn
، TensorFlow، وPyTorch.
فهم النوم مقابل المسافة
قبل أن نبدأ، دعونا نفهم الفرق بين النوم الإقليدي مقابل المسافة الإقليدية.
- النوم هو المسافة/الطول/الحجم للمتجه من الأصل (0,0).
- المسافة هي المسافة/الطول/الحجم بين متجهين.
المتطلبات الأساسية
- تثبيت Jupyter.
- قم بتشغيل الكود التالي في ملف Jupyter Notebook لتثبيت المتطلبات الأساسية.
# تثبيت المتطلبات الأساسية لتشغيل الملاحظة
!pip install numpy
!pip install scipy
%pip install torch
!pip install tensorflow
سوف تستخدم Jupyter Notebook لتشغيل خلايا كود Python لحساب الطول L2 في مكتبات Python مختلفة.
هيا بنا نبدأ
الآن بعد أن قمت بإعداد Jupyter على جهازك وتثبيت المكتبات المطلوبة لـ Python، هيا نبدأ بتعريف موتر أحادي البعد باستخدام NumPy.
NumPy
NumPy هي مكتبة Python تُستخدم للحسابات العلمية. توفر NumPy صفائف متعددة الأبعاد وأشياء أخرى مشتقة.
رتبة الموتر
# تعريف موتر أحادي البعد (1D)
import numpy as np
vector1 = np.array([3,7]) #np.random.randint(1,5,2)
vector2 = np.array([5,2]) #np.random.randint(1,5,2)
print("Vector 1:",vector1)
print("Vector 2:",vector2)
print(f"shape & size of Vector1 & Vector2:", vector1.shape, vector1.size)
طباعة المتجهات
Vector 1: [3 7]
Vector 2: [5 2]
shape & size of Vector1 & Vector2: (2,) 2
Matplotlib
Matplotlib هي مكتبة تصور في Python لإنشاء تصورات ساكنة، متحركة، وتفاعلية. ستستخدم Matplotlib’s quiver
لرسم المتجهات.
# ارسم المتجهات باستخدام Matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
origin = np.array([0,0])
plt.quiver(*origin, vector1[0],vector1[1], angles='xy', color='r', scale_units='xy', scale=1)
plt.quiver(*origin, vector2[0],vector2[1], angles='xy', color='b', scale_units='xy', scale=1)
plt.plot([vector1[0],vector2[0]], [vector1[1],vector2[1]], 'go', linestyle="--")
plt.title('Vector Representation')
plt.xlim([0,10])
plt.ylim([0,10])
plt.grid()
plt.show()
تمثيل المتجه باستخدام Matplotlib
# طول L2 (إقليدي) لمتجه
# NumPy
norm1 = np.linalg.norm(vector1, ord=2)
print("The magnitude / distance from the origin",norm1)
norm2 = np.linalg.norm(vector2, ord=2)
print("The magnitude / distance from the origin",norm2)
الناتج بمجرد تشغيل هذا في ملف Jupyter Notebook:
The magnitude / distance from the origin 7.615773105863909
The magnitude / distance from the origin 5.385164807134504
SciPy
SciPy مبنية على NumPy وتستخدم للحسابات الرياضية. إذا لاحظت، فإن SciPy تستخدم نفس وظائف linalg
مثل NumPy.
# SciPy
import scipy
norm_vector1 = scipy.linalg.norm(vector1, ord=2)
print("L2 norm in scipy for vector1:", norm_vector1)
norm_vector2 = scipy.linalg.norm(vector2, ord=2)
print("L2 norm in scipy for vector2:", norm_vector2)
الناتج:
L2 norm in scipy for vector1: 7.615773105863909
L2 norm in scipy for vector2: 5.385164807134504
Scikit-Learn
كما تقول وثائق Scikit-learn:
Scikit-learn
هي مكتبة التعلم الآلي مفتوحة المصدر التي تدعم التعلم المراقب وغير المراقب. كما توفر أدوات مختلفة لتكييف النموذج ومعالجة البيانات واختيار النموذج وتقييم النموذج والعديد من الوظائف الأخرى.
نعيد تشكيل المتجه كما يتوقع Scikit-learn
أن يكون المتجه ثنائي الأبعاد.
# Sklearn
from sklearn.metrics.pairwise import euclidean_distances
vector1_reshape = vector1.reshape(1,-1)
## يتوقع Scikit-learn أن يكون المتجه ثنائي الأبعاد
euclidean_distances(vector1_reshape, [[0, 0]])[0,0]
الناتج
7.615773105863909
TensorFlow
TensorFlow هي منصة التعلم الآلي على مدار الخط.
# TensorFlow
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'
import tensorflow as tf
print("TensorFlow version:", tf.__version__)
## تتوقع Tensorflow تنس الأنواع float32, float64, complex64, complex128
vector1_tf = vector1.astype(np.float64)
tf_norm = tf.norm(vector1_tf, ord=2)
print("Euclidean(l2) norm in TensorFlow:",tf_norm.numpy())
الناتج
يطبع الناتج إصدار TensorFlow والذي يمثل القيمة الطبيعية للطور L2:
TensorFlow version: 2.15.0
Euclidean(l2) norm in TensorFlow: 7.615773105863909
PyTorch
PyTorch هي مكتبة تنس محسنة للتعلم العميق باستخدام GPUs وCPUs.
# PyTorch
import torch
print("PyTorch version:", torch.__version__)
norm_torch = torch.linalg.norm(torch.from_numpy(vector1_tf), ord=2)
norm_torch.item()
يطبع الناتج إصدار PyTorch والذي يمثل القيمة الطبيعية:
PyTorch version: 2.1.2
7.615773105863909
المسافة الإقليدية
يتم حساب المسافة الإقليدية بنفس طريقة القيمة الطبيعية، باستثناء أنك تحسب الفرق بين المتجهات قبل تمرير الفرق – vector_diff
، في هذه الحالة، إلى المكتبات المقابلة.
# المسافة الإقليدية بين المتجهات
import math
vector_diff = vector1 - vector2
# باستخدام القيمة الطبيعية
euclidean_distance = np.linalg.norm(vector_diff, ord=2)
print(euclidean_distance)
# باستخدام حاصل الضرب القياسي
norm_dot = math.sqrt(np.dot(vector_diff.T,vector_diff))
print(norm_dot)
الناتج
الإخراج باستخدام وظائف norm و dot من مكتبات NumPy:
5.385164807134504
5.385164807134504
# SciPy
from scipy.spatial import distance
distance.euclidean(vector1,vector2)
إخراج باستخدام SciPy
5.385164807134504
يتوفر دفتر الملاحظات Jupyter مع الإخراجات على مستودع GitHub. يمكنك تشغيل دفتر الملاحظات Jupyter على Colab وفقًا للتعليمات الموجودة على مستودع GitHub.
Source:
https://dzone.com/articles/norm-of-a-one-dimensional-tensor-in-python-libraries