חישוב הנורמה של וקטורים הוא חיוני גם בבינה מלאכותית ומחשוב קוונטי למשימות כמו מימוד, רגרסיה, מדדי מרחק, קריטריונים להתכנסות, ייצוג מצבים קוונטיים, שמירה על אוניטריות של פעולות, תיקון שגיאות ועיצוב אלגוריתמים ומעגלים קוונטיים.
תלמד לחשב את האורך האוקלידי (נורמה/מרחק), המכונה גם נורמת L2, של טנזור בממד יחיד (1D) בפייתון בספריות כמו NumPy, SciPy, Scikit-Learn
, TensorFlow, וPyTorch.
הבנה של נורמה מול מרחק
לפני שנתחיל, בואו נבין את ההבדל בין נורמת אוקלידי למרחק אוקלידי.
- נורמה היא המרחק/האורך/הגודל של הוקטור מהראשית (0,0).
- מרחק הוא המרחק/האורך/הגודל בין שני וקטורים.
דרישות קדומות
- התקנת Jupyter.
- הרץ את הקוד הבא במחברת Jupyter כדי להתקין את הדרישות מוקדמות.
# התקנת הדרישות מוקדמות לריצת המחברת
!pip install numpy
!pip install scipy
%pip install torch
!pip install tensorflow
תשתמש במחברת Jupyter כדי לרוץ על תאי קוד Python כדי לחשב את הנורמה L2 בספריות Python שונות.
בואו נתחיל
עכשיו שהתקנת את Jupyter על המכשיר שלך והתקנת את הספריות הנדרשות של Python, בואו נתחיל על ידי הגדרת טנזור חד-ממדי באמצעות NumPy.
NumPy
NumPy היא ספריית Python המשמשת לחישובים מדעיים. NumPy מספקת מערך רב-ממדי ואובייקטים מו� derived.
דרגות טנזור
# הגדרת טנזור חד-ממדי (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 ליצירת ויזואליזציות סטטיות, מנצנצות ואינטראקטיביות. תשתמש ב-quiver
של Matplotlib כדי לשרטט את הווקטורים.
# ציור הווקטורים באמצעות 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()
ייצוג וקטורי באמצעות Matplolib
# נורמת 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:
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