Loading
Loading
المتجهات والمصفوفات هي أساس الجبر الخطي وعمود فقري كل خوارزميات AI.
قائمة من الأرقام تمثّل نقطة في فضاء متعدد الأبعاد. في AI كل شيء يُمثَّل كمتجه:
جدول من الأرقام (صفوف × أعمدة). في Neural Networks:
import math
from typing import List
# ─── Vector ────────────────────────────────────────────────
class Vector:
def __init__(self, data: List[float]):
self.data = data
self.dim = len(data)
def __repr__(self) -> str:
vals = ", ".join(f"{x:.2f}" for x in self.data)
return f"Vector([{vals}])"
def magnitude(self) -> float:
return math.sqrt(sum(x**2 for x in self.data))
def normalize(self) -> "Vector":
mag = self.magnitude()
return Vector([x / mag for x in self.data]) if mag > 0 else Vector([0.0]*self.dim)
def dot(self, other: "Vector") -> float:
return sum(a * b for a, b in zip(self.data, other.data))
def cosine_similarity(self, other: "Vector") -> float:
denom = self.magnitude() * other.magnitude()
return self.dot(other) / denom if denom > 0 else 0.0
def __add__(self, other: "Vector") -> "Vector":
return Vector([a + b for a, b in zip(self.data, other.data)])
def scale(self, s: float) -> "Vector":
return Vector([x * s for x in self.data])
# ─── Matrix ────────────────────────────────────────────────
class Matrix:
def __init__(self, data: List[List[float]]):
self.data = data
self.rows = len(data)
self.cols = len(data[0]) if data else 0
@classmethod
def zeros(cls, r: int, c: int) -> "Matrix":
return cls([[0.0]*c for _ in range(r)])
@classmethod
def identity(cls, n: int) -> "Matrix":
m = cls.zeros(n, n)
for i in range(n): m.data[i][i] = 1.0
return m
def transpose(self) -> "Matrix":
return Matrix([[self.data[r][c] for r in range(self.rows)]
for c in range(self.cols)])
def matmul(self, B: "Matrix") -> "Matrix":
C = Matrix.zeros(self.rows, B.cols)
for i in range(self.rows):
for j in range(B.cols):
C.data[i][j] = sum(self.data[i][k] * B.data[k][j] for k in range(self.cols))
return C
def show(self, name: str = ""):
shape = f"{self.rows}×{self.cols}"
if name: print(f"\n{name} ({shape}):")
for row in self.data:
cells = " ".join(f"{x:6.2f}" for x in row)
print(f" [ {cells} ]")
# ─── Embeddings ────────────────────────────────────────────
print("🔢 المتجهات في AI — Word Embeddings:")
print("=" * 52)
words = {
"ملك": Vector([0.90, 0.10, 0.80, 0.20]),
"ملكة": Vector([0.90, 0.90, 0.80, 0.20]),
"رجل": Vector([0.80, 0.10, 0.10, 0.30]),
"امرأة": Vector([0.80, 0.90, 0.10, 0.30]),
}
print("\n📐 Cosine Similarity بين الكلمات:")
keys = list(words.keys())
for i in range(len(keys)):
for j in range(i+1, len(keys)):
w1, w2 = keys[i], keys[j]
sim = words[w1].cosine_similarity(words[w2])
bar = "█" * int(sim * 10)
print(f" {w1:<8} ↔ {w2:<8}: {sim:.3f} {bar}")
# ─── Matrix Operations ─────────────────────────────────────
print(f"\n\n📊 المصفوفات في Neural Networks:")
# Input: 3 samples × 4 features
X = Matrix([[1.0, 0.5, 0.8, 0.2],
[0.3, 0.9, 0.1, 0.7],
[0.7, 0.4, 0.6, 0.5]])
# Weights: 4 → 2
W = Matrix([[0.1, 0.4],
[0.3, 0.2],
[0.2, 0.5],
[0.4, 0.1]])
X.show("X (3 عينات × 4 ميزات)")
W.show("W (4 → 2 أوزان)")
Z = X.matmul(W)
Z.show("Z = X @ W (3 عينات × 2 مخرجات)")
# Transpose
WT = W.transpose()
WT.show("Wᵀ (2 × 4)")
print(f"\n✅ فهم المتجهات = فهم كيف يفكر النموذج!")