1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 21

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

29.07.2022, 15:31. Показов 2224. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru