TensorInfo

This commit is contained in:
2025-11-17 12:44:50 +04:00
parent 41f5634ce9
commit bbd9c67c96
6 changed files with 395 additions and 609 deletions

View File

@@ -1,6 +1,181 @@
from tensor.tensor import *
a = iMatrix([2, 3], 2)
a *= 3.0
print(a)
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()