С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 24.03.2020
Сообщений: 37

Умножение матрицы на скаляр и на другие матрицы

11.11.2020, 13:04. Показов 9804. Ответов 0
Метки нет (Все метки)

Лучший ответ Сообщение было отмечено DmFat как решение

Решение

Студворк — интернет-сервис помощи студентам
Здравствуйте, можете с этим помочь:
Измените метод __mul__ таким образом, чтобы матрицы можно было
умножать как на скаляры, так и на другие матрицы. В случае, если две
матрицы перемножить невозможно, то тогда выбросьте ошибку
MatrixError. Первая матрице в ошибке – это self, вторая – это второй
операнд умножения. Вот что я сделал:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from sys import stdin
from copy import deepcopy
class MatrixError(BaseException):
    def __init__(self, Matrix, other):
        self.matrix1 = Matrix
        self.matrix2 = other
 
class Matrix():
    def __init__(self, a):
        self.arr=a.copy()
          
        
    def __str__(self):
        str_ = ""
        k = len(self.arr) # кол-во строк
        l = len(self.arr[0]) # кол-во столбцов
        for i in range(k):
            for j in range(l):
                str_ += str(self.arr[i][j])
                if j < l-1:
                    str_ += "\t" # элементы строк разделяются табуляцией
            if i < k-1:
                str_ += "\n" # строки разделяются переносами строк
        
        return str_
    
    def size(self):
        return (len(self.arr),len(self.arr[0]))
    
    def __add__(self, other):
        if self.size()[0] == other.size()[0] and self.size()[1] == other.size()[1]:
            add_mat=[]
            s=self.size()
            for row in range(0,s[0]):
                temp=[]
                for i in range(0,s[1]):
                    temp.append(self.arr[row][i]+other.arr[row][i])
                add_mat.append(temp)
            return Matrix(add_mat)
        else:
            raise MatrixError(self.arr, other)
                    
    
    def __mul__(self, a):
        res = deepcopy(self.arr)
        for i in range(self.size()[0]):
            for j in range(self.size()[1]):
                res[i][j] *= a
        return res
 
    def __rmul__(self, a):
        return self.__mul__(a)
    def transpose(self):
        transMatrix = list(zip(*self.arr))
        self.matrix = transMatrix
        return Matrix(transMatrix)
 
    def transposed(self):
        transMatrix = list(zip(*self.arr))
        return Matrix(transMatrix)
    #__rmul__ = __mul__
m = Matrix([[1, 0, 3], [4, 30, 6]])
n=Matrix([[7, 7, 2], [145, 21, 1]])
print(m+n)
print(n*m)
print(m.transpose())
Добавлено через 57 минут
недолго подумав решил, оставлю может кому надо:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from sys import stdin
from copy import deepcopy
class MatrixError(BaseException):
    def __init__(self, Matrix, other):
        self.matrix1 = Matrix
        self.matrix2 = other
 
class Matrix():
    def __init__(self, a):
        self.arr=a.copy()
          
        
    def __str__(self):
        str_ = ""
        k = len(self.arr) # кол-во строк
        l = len(self.arr[0]) # кол-во столбцов
        for i in range(k):
            for j in range(l):
                str_ += str(self.arr[i][j])
                if j < l-1:
                    str_ += "\t" # элементы строк разделяются табуляцией
            if i < k-1:
                str_ += "\n" # строки разделяются переносами строк
        
        return str_
    
    def size(self):
        return (len(self.arr),len(self.arr[0]))#возвращаем длину строк и столбцов
    
    def __add__(self, other):
        if self.size()[0] == other.size()[0] and self.size()[1] == other.size()[1]:#проверяем размерность
            add_mat=[]
            s=self.size()
            for row in range(0,s[0]):
                temp=[]
                for i in range(0,s[1]):
                    temp.append(self.arr[row][i]+other.arr[row][i])
                add_mat.append(temp)
            return Matrix(add_mat)
        else:
            raise MatrixError(self, other)
                    
    
    # def __mul__(self, a):
    #     res = deepcopy(self.arr)
    #     for i in range(self.size()[0]):
    #         for j in range(self.size()[1]):
    #             res[i][j] *= a
    #     return res
    def __mul__(self, a):
      if isinstance(a,int) or isinstance(a,float):
          res = deepcopy(self)
          for i in range(self.size()[0]):
              for j in range(self.size()[1]):
                  res.arr[i][j] *= a
      else:
          if(self.size()[1] == a.size()[0]):
              res = Matrix([[0 for i in range(a.size()[1])] for j in range(self.size()[0])])
              for i in range(len(self.arr)):
                for j in range(len(a.arr[0])):
                      for k in range(len(a.arr)):
                              res.arr[i][j] += self.arr[i][k] * a.arr[k][j]
          else:
               raise MatrixError(self,a)
      return res
    def __rmul__(self, a):
        return self.__mul__(a)
    def transpose(self):
        transMatrix = list(zip(*self.arr))
        self.matrix = transMatrix
        return Matrix(transMatrix)
 
    def transposed(self):
        transMatrix = list(zip(*self.arr))
        return Matrix(transMatrix)
    #__rmul__ = __mul__
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2020, 13:04
Ответы с готовыми решениями:

Умножение матрицы на скаляр
Подпрограммы. 1) Вычисление суммы положительных элементов матрицы. 2) Умножить матрицы на скаляр.

Умножение матрицы на скаляр
Даны натуральные числа n, m, определяющие соответственно количество строк и столбцов в некоторой заданной матрицы действительный чисел М1,...

Умножение матрицы на скаляр
Приветствую знатоков с++, нужна ваша помощь: Нужно составьте программу умножения матрицы на скаляр (матрица размера m x n, т.е. нужно...

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

Как определить скаляр k1, умножение на который преобразует элементы матрицы G1 к значениям...
Есть матрица G1 = 12 15 28 2 23 0 2 13 7 7 20 13 7 26 20 6 0 12...

Умножение матриц на скаляры и другие матрицы
Измените метод __mul__ таким образом, чтобы матрицы можно было умножать как на скаляры, так и на другие матрицы. В случае, если две матрицы...

Написать функции умножения матрицы на скаляр и вычисления следа квадратной матрицы
Заданы матрицы A и C с размерами N×M и L×L соответственно. Написать функции умножения матрицы на скаляр и вычисления следа квадратной...

Суммирование и умножения двух прямоугольных матриц, умножение матрицы на число, умножение матрицы на вектор
Друзья! Обращаюсь к тем, кому не сложно закинуть готовую или в качестве развлечения написать следующую программу: Реализуйте функции для...

Сложение, вычитание, умножение матриц, умножение матрицы на число, сортировка элементов строк матрицы
Помогите пожалуйста, очень срочно нужно: разработать приложение в среде Delphi для осуществления над матрицами следующих операций:...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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