mirror of
https://github.com/StepanovPlaton/NeuralNetwork.git
synced 2026-04-04 04:40:40 +04:00
182 lines
5.2 KiB
Python
182 lines
5.2 KiB
Python
from tensor.tensor import *
|
||
|
||
|
||
def test_matrix_operations():
|
||
print("=" * 50)
|
||
print("ТЕСТИРОВАНИЕ БИБЛИОТЕКИ MATRIX")
|
||
print("=" * 50)
|
||
|
||
# Тест создания матриц
|
||
print("\n1. СОЗДАНИЕ МАТРИЦ:")
|
||
print("-" * 30)
|
||
|
||
# Создание матрицы с заполнением одним значением
|
||
m1 = Matrix([2, 3], 1.0)
|
||
print(f"Matrix([2, 3], 1.0) = {m1}")
|
||
|
||
# Создание матрицы с разными значениями
|
||
m2 = Matrix([2, 3], 2.0, 3.0)
|
||
print(f"Matrix([2, 3], 2.0, 3.0) = {m2}")
|
||
|
||
# Создание матрицы для умножения
|
||
m3 = Matrix([3, 2], 2.0)
|
||
print(f"Matrix([3, 2], 2.0) = {m3}")
|
||
|
||
# Тест получения свойств
|
||
print("\n2. СВОЙСТВА МАТРИЦ:")
|
||
print("-" * 30)
|
||
print(f"m1.get_shape() = {m1.get_shape()}")
|
||
print(f"m1.get_axes() = {m1.get_axes()}")
|
||
print(f"m1.get_size() = {m1.get_size()}")
|
||
|
||
# Тест доступа к элементам
|
||
print("\n3. ДОСТУП К ЭЛЕМЕНТАМ:")
|
||
print("-" * 30)
|
||
print(f"m1[0] = {m1[0]}")
|
||
print(f"m1[0, 1] = {m1[0, 1]}")
|
||
|
||
# Установка значений
|
||
m1[0, 1] = 5.0
|
||
print(f"После m1[0, 1] = 5.0: {m1}")
|
||
|
||
# Тест арифметических операций
|
||
print("\n4. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ:")
|
||
print("-" * 30)
|
||
|
||
# Сложение
|
||
m_add = m1 + m2
|
||
print(f"m1 + m2 = {m_add}")
|
||
|
||
# Вычитание
|
||
m_sub = m1 - m2
|
||
print(f"m1 - m2 = {m_sub}")
|
||
|
||
# Умножение на скаляр
|
||
m_mul_scalar = m1 * 2.0
|
||
print(f"m1 * 2.0 = {m_mul_scalar}")
|
||
|
||
# Поэлементное умножение
|
||
m_mul_element = m1 * m2
|
||
print(f"m1 * m2 (поэлементно) = {m_mul_element}")
|
||
|
||
# Деление на скаляр
|
||
m_div = m1 / 2.0
|
||
print(f"m1 / 2.0 = {m_div}")
|
||
|
||
# Унарные операторы
|
||
m_neg = -m1
|
||
print(f"-m1 = {m_neg}")
|
||
m_pos = +m1
|
||
print(f"+m1 = {m_pos}")
|
||
|
||
# Тест матричного умножения
|
||
print("\n5. МАТРИЧНОЕ УМНОЖЕНИЕ:")
|
||
print("-" * 30)
|
||
try:
|
||
m_matmul = m1 @ m3
|
||
print(f"m1 @ m3 = {m_matmul}")
|
||
except Exception as e:
|
||
print(f"Ошибка при матричном умножении: {e}")
|
||
|
||
# Тест транспонирования
|
||
print("\n6. ТРАНСПОНИРОВАНИЕ:")
|
||
print("-" * 30)
|
||
m_transposed = m1.t()
|
||
print(f"m1.t() = {m_transposed}")
|
||
|
||
try:
|
||
m_transpose_method = m1.transpose(0, 1)
|
||
print(f"m1.transpose(0, 1) = {m_transpose_method}")
|
||
except Exception as e:
|
||
print(f"Ошибка при transpose(0, 1): {e}")
|
||
|
||
try:
|
||
m_transpose_list = m1.transpose([0, 1])
|
||
print(f"m1.transpose([0, 1]) = {m_transpose_list}")
|
||
except Exception as e:
|
||
print(f"Ошибка при transpose([0, 1]): {e}")
|
||
|
||
# Тест операций на месте
|
||
print("\n7. ОПЕРАЦИИ НА МЕСТЕ:")
|
||
print("-" * 30)
|
||
|
||
m_test = Matrix([2, 2], 1.0)
|
||
print(f"Исходная матрица: {m_test}")
|
||
|
||
m_test += 2.0
|
||
print(f"После m_test += 2.0: {m_test}")
|
||
|
||
m_test -= 1.0
|
||
print(f"После m_test -= 1.0: {m_test}")
|
||
|
||
m_test *= 3.0
|
||
print(f"После m_test *= 3.0: {m_test}")
|
||
|
||
m_test /= 2.0
|
||
print(f"После m_test /= 2.0: {m_test}")
|
||
|
||
# Тест с вашими матрицами из примера
|
||
print("\n8. ТЕСТ С ВАШИМИ МАТРИЦАМИ:")
|
||
print("-" * 30)
|
||
|
||
a = Matrix([2, 3], 2)
|
||
b = Matrix([3, 2], 1)
|
||
|
||
print(f"a = {a}")
|
||
print(f"b = {b}")
|
||
|
||
try:
|
||
result = a @ b
|
||
print(f"a @ b = {result}")
|
||
except Exception as e:
|
||
print(f"Ошибка при a @ b: {e}")
|
||
|
||
# Тест обратных операций
|
||
print("\n9. ОБРАТНЫЕ ОПЕРАЦИИ:")
|
||
print("-" * 30)
|
||
|
||
m_base = Matrix([2, 2], 3.0)
|
||
print(f"Исходная матрица: {m_base}")
|
||
|
||
# Правое сложение
|
||
m_radd = 2.0 + m_base
|
||
print(f"2.0 + m_base = {m_radd}")
|
||
|
||
# Правое умножение
|
||
m_rmul = 2.0 * m_base
|
||
print(f"2.0 * m_base = {m_rmul}")
|
||
|
||
# Правое вычитание
|
||
m_rsub = 10.0 - m_base
|
||
print(f"10.0 - m_base = {m_rsub}")
|
||
|
||
print("\n" + "=" * 50)
|
||
print("ТЕСТИРОВАНИЕ ЗАВЕРШЕНО")
|
||
print("=" * 50)
|
||
|
||
|
||
def test_edge_cases():
|
||
print("\n\n10. ТЕСТ ГРАНИЧНЫХ СЛУЧАЕВ:")
|
||
print("=" * 50)
|
||
|
||
try:
|
||
# Попытка создания с разными параметрами
|
||
m_empty = Matrix([0, 0])
|
||
print(f"Matrix([0, 0]) = {m_empty}")
|
||
except Exception as e:
|
||
print(f"Ошибка при создании Matrix([0, 0]): {e}")
|
||
|
||
try:
|
||
# Попытка доступа к несуществующему элементу
|
||
m_test = Matrix([2, 2], 1.0)
|
||
print(f"Попытка доступа к m_test[5, 5]: ", end="")
|
||
value = m_test[5, 5]
|
||
print(value)
|
||
except Exception as e:
|
||
print(f"Ошибка: {e}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
test_matrix_operations()
|
||
test_edge_cases()
|