معيار الموتر أحادي البعد في مكتبات بيثون

حساب النوم للمتجهات أمر ضروري في كل من الذكاء الاصطناعي والحوسبة الكمية لمهام مثل القياس، التأثير، مقاييس المسافة، معايير التقارب، تمثيل الحالات الكمية، تأكيد الوحدانية للعمليات، تصحيح الأخطاء، وتصميم خوارزميات ودوائر كمية.

ستتعلم كيفية حساب الإقليدي (النوم/المسافة)، المعروف أيضاً بنظام النوم L2، لموتر أحادي البعد (1D) في مكتبات بايثون مثل NumPy، SciPy، Scikit-Learn، TensorFlow، وPyTorch

فهم النوم مقابل المسافة

قبل أن نبدأ، دعونا نفهم الفرق بين النوم الإقليدي مقابل المسافة الإقليدية.

  1. النوم هو المسافة/الطول/الحجم للمتجه من الأصل (0,0).
  2. المسافة هي المسافة/الطول/الحجم بين متجهين.

المتطلبات الأساسية

  • تثبيت Jupyter.
  • قم بتشغيل الكود التالي في ملف Jupyter Notebook لتثبيت المتطلبات الأساسية.
Python

 

# تثبيت المتطلبات الأساسية لتشغيل الملاحظة
!pip install numpy
!pip install scipy
%pip install torch
!pip install tensorflow

سوف تستخدم Jupyter Notebook لتشغيل خلايا كود Python لحساب الطول L2 في مكتبات Python مختلفة.

هيا بنا نبدأ

الآن بعد أن قمت بإعداد Jupyter على جهازك وتثبيت المكتبات المطلوبة لـ Python، هيا نبدأ بتعريف موتر أحادي البعد باستخدام NumPy.

NumPy

NumPy هي مكتبة Python تُستخدم للحسابات العلمية. توفر NumPy صفائف متعددة الأبعاد وأشياء أخرى مشتقة.

رتبة الموتر

Python

 

# تعريف موتر أحادي البعد (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)

طباعة المتجهات

Plain Text

 

Vector 1: [3 7]
Vector 2: [5 2]
shape & size of Vector1 & Vector2: (2,) 2

Matplotlib 

Matplotlib هي مكتبة تصور في Python لإنشاء تصورات ساكنة، متحركة، وتفاعلية. ستستخدم Matplotlib’s quiver لرسم المتجهات.

Python

 

# ارسم المتجهات باستخدام 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

Python

 

# طول 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:

Plain Text

 

The magnitude / distance from the origin 7.615773105863909
The magnitude / distance from the origin 5.385164807134504

SciPy

SciPy مبنية على NumPy وتستخدم للحسابات الرياضية. إذا لاحظت، فإن SciPy تستخدم نفس وظائف linalg مثل NumPy.

Python

 

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

الناتج:

Plain Text

 

L2 norm in scipy for vector1: 7.615773105863909
L2 norm in scipy for vector2: 5.385164807134504

Scikit-Learn

كما تقول وثائق Scikit-learn:

Scikit-learn هي مكتبة التعلم الآلي مفتوحة المصدر التي تدعم التعلم المراقب وغير المراقب. كما توفر أدوات مختلفة لتكييف النموذج ومعالجة البيانات واختيار النموذج وتقييم النموذج والعديد من الوظائف الأخرى.

نعيد تشكيل المتجه كما يتوقع Scikit-learn أن يكون المتجه ثنائي الأبعاد.

Python

 

# Sklearn
from sklearn.metrics.pairwise import euclidean_distances
vector1_reshape = vector1.reshape(1,-1)
## يتوقع Scikit-learn أن يكون المتجه ثنائي الأبعاد
euclidean_distances(vector1_reshape, [[0, 0]])[0,0]

الناتج

Plain Text

 

7.615773105863909

TensorFlow

TensorFlow هي منصة التعلم الآلي على مدار الخط.

Python

 

# 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:

Plain Text

 

TensorFlow version: 2.15.0
Euclidean(l2) norm in TensorFlow: 7.615773105863909

PyTorch

PyTorch هي مكتبة تنس محسنة للتعلم العميق باستخدام GPUs وCPUs.

Python

 

# PyTorch
import torch
print("PyTorch version:", torch.__version__)

norm_torch = torch.linalg.norm(torch.from_numpy(vector1_tf), ord=2)
norm_torch.item()

يطبع الناتج إصدار PyTorch والذي يمثل القيمة الطبيعية:

Plain Text

 

PyTorch version: 2.1.2

7.615773105863909

المسافة الإقليدية

يتم حساب المسافة الإقليدية بنفس طريقة القيمة الطبيعية، باستثناء أنك تحسب الفرق بين المتجهات قبل تمرير الفرق – vector_diff، في هذه الحالة، إلى المكتبات المقابلة.

Python

 

# المسافة الإقليدية بين المتجهات
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:

Plain Text

 

5.385164807134504
5.385164807134504

Python

 

# 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