סדרת טנזור חד-ממדי בספריות פייתון

חישוב הנורמה של וקטורים הוא חיוני גם בבינה מלאכותית ומחשוב קוונטי למשימות כמו מימוד, רגרסיה, מדדי מרחק, קריטריונים להתכנסות, ייצוג מצבים קוונטיים, שמירה על אוניטריות של פעולות, תיקון שגיאות ועיצוב אלגוריתמים ומעגלים קוונטיים.

תלמד לחשב את האורך האוקלידי (נורמה/מרחק), המכונה גם נורמת L2, של טנזור בממד יחיד (1D) בפייתון בספריות כמו NumPy, SciPy, Scikit-Learn, TensorFlow, וPyTorch

הבנה של נורמה מול מרחק

לפני שנתחיל, בואו נבין את ההבדל בין נורמת אוקלידי למרחק אוקלידי.

  1. נורמה היא המרחק/האורך/הגודל של הוקטור מהראשית (0,0).
  2. מרחק הוא המרחק/האורך/הגודל בין שני וקטורים.

דרישות קדומות

  • התקנת Jupyter.
  • הרץ את הקוד הבא במחברת Jupyter כדי להתקין את הדרישות מוקדמות.
Python

 

# התקנת הדרישות מוקדמות לריצת המחברת
!pip install numpy
!pip install scipy
%pip install torch
!pip install tensorflow

תשתמש במחברת Jupyter כדי לרוץ על תאי קוד Python כדי לחשב את הנורמה L2 בספריות Python שונות.

בואו נתחיל

עכשיו שהתקנת את Jupyter על המכשיר שלך והתקנת את הספריות הנדרשות של Python, בואו נתחיל על ידי הגדרת טנזור חד-ממדי באמצעות NumPy.

NumPy

NumPy היא ספריית Python המשמשת לחישובים מדעיים. NumPy מספקת מערך רב-ממדי ואובייקטים מו� derived.

דרגות טנזור

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 ליצירת ויזואליזציות סטטיות, מנצנצות ואינטראקטיביות. תשתמש ב-quiver של Matplotlib כדי לשרטט את הווקטורים.

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

ייצוג וקטורי באמצעות Matplolib

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:

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