Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 21

Реализация класса matrix для умножения матриц, заданных в виде списков

29.07.2022, 15:31. Показов 2197. Ответов 2

Студворк — интернет-сервис помощи студентам
На вход подаются 2 произвольных списка (в тренировочном примере a=[[1, 2],[3, 4]] и b=[[5,6],[7,8]]). Класс matrix в своем конструкторе инициализирует матрицу (список из списков из float). Внутри класса есть функция mm, которая принимает на вход объект этого же класса и находит матричное произведение текущей матрицы (та, что в конструкторе) на переданную в функцию. Результат возвращать в виде списка из списков float. Кроме этого внутри matrix надо реализовать функцию для отображения матрицы на экран строка за строкой. Т.е. [[1.,2.,3.], [4.,5.,6.]] будет отображено так:

[1.0,2.0,3.0]

[4.0,5.0,6.0]

В случае, если матрицы не согласованы (число столбцов в первой не равно числу строк во второй), возвращать при произведении "матрицы не согласованы". Вот, что есть:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class matrix():
    def __init__(self, m):
        self.m=m
 
    def mm(self, another_m):
        #self.another_m=another_m
        mat3 = [[0,0,0],[0,0,0],[0,0,0]]
        
        if len(self.m)!=len(another_m.m[0]):
            return 'матрицы не согласованы'
        else:
            for i in range(len(self.m)):
                for k in range(len(another_m.m)):
                    mat3[i][k] = self.m[i][k]  * another_m.m[i][k]
            return mat3[i][k]
                
    # print(class_obj) отошлет нас сюда
    def __str__(self):
        return '\n'.join([''.join(['%d\t'% i for i in row]) for row in self.m])
# преобразуем их в объект класса matrix
a = matrix(a)
b = matrix(b)
# результат произведения преобразуем в объект класса
result = a.mm(b)
# проверка на согласованность
if result == 'матрицы не согласованы':
    print('матрицы не согласованы')
else:
    mm = matrix(result)
    # распечатываем объект класса матрицы на экран
    print(mm)
Ошибку выдаёт метод класса для отображения матрицы (__str__). Пробовала несколько вариантов, но не совсем понимаю как оно работает. Просьба в первую очередь помочь с этим. В таком виде он говорит, что float object is not iterable.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2022, 15:31
Ответы с готовыми решениями:

Создать класс Matrix и функции умножения и сложения матриц
Создайте класс Matrix на базе вектора vector<vector<int>>. Определите операторную функцию ostream& operator<<(ostream&, const...

Дать определение класса Matrix – квадратных матриц и реализацию этого класса
Помогите, пожалуйста, решить задания к к.р. по С++. Если кто-то знает какие-то задания из списка, напишите пожалуйста! 4. Дать...

Перегрузка конструкторов (создание класса Matrix, перемножение матриц)
Помогите пожалуйста с умножением матриц Добавлено через 20 секунд #include <iostream.h> #include <conio.h> #include...

2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.07.2022, 15:39
Цитата Сообщение от Rina2328 Посмотреть сообщение
return mat3[i][k]
return mat3
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 21
29.07.2022, 16:07  [ТС]
спасибо, это уже сама заметила, сайт отредактировать не дал. Тем не менее, беда осталась. Метод, написанный у меня в mm по сути умножает только соответствующие друг друг элементы и в таком виде подставляет их в итоговую матрицу. То есть надо его заменить на что-то, что действительно реализует матричное умножение (желательно без numpy). Результат сейчас:
[1.000000 , 4.000000 ]

[9.000000 , 16.000000 ]

(да, метод для вывода я тоже подредактировала
Python
1
2
 def __str__(self):
        return '\n'.join(['['+', '.join(['%f\t'% i for i in row])+']' for row in self.m])
, но от лишних пробелов и нулей избавиться не удалось, за помощь по их устранению, буду очень признательна).
Ожидаемый результат:

[7.0, 10.0]

[15.0, 22.0]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2022, 16:07
Помогаю со студенческими работами здесь

Реализация класса Matrix: Добавить, умножить
Привет! Помогите, пожалуйста, решить задание. 1. Реализуйте класс Matrix. Он должен содержать: Конструктор от списка списков....

Реализация класса Matrix (ООП на Python)
Помогите решить задачи, бьюсь больше недели, пока безрезультатно:cry: Обидно, последняя неделя обучения осталась, не могу закрыть... ...

Написать программу умножения двух заданных квадратных матриц
Написать программу умножения двух заданных квадратных матриц. Результирующую матрицу записать в файл построчно.

Написать программу умножения двух заданных квадратных матриц
Написать программу умножения двух заданных квадратных матриц. Элементы матриц расположены в двух заданных файлах построчно.

Написать программу умножения двух заданных квадратных матриц
Помогите пожалуйста с таким заданием: Написать программу умножения двух заданных квадратных матриц. Элементы матриц расположены в двух...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru