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

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

11.11.2020, 13:04. Показов 9923. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru