Создание нулевой матрицы для умножения матрицы не работает, несмотря на то, что при создании матрицы с помощью цикла - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь создать код, который выполняет умножение матриц без numpy или zip *. Код работает нормально, когда я определяю нулевую матрицу, которая получает результат умножения, но результаты перекрываются, когда я пытаюсь сделать переменную определенной циклом.

Я, очевидно, не могу просто определить пустую матрицу, потому что компилятор выдает индекс из-за ошибки диапазона, а результирующая матрица умножения изменяется в зависимости от входных данных. Я предоставил скриншот для пустой матрицы, когда она определена и когда код позволяет создавать пустую матрицу.

def empty(X, Y):
  P=[]
  row=[]
  for r in range(len(Y[0])):
    row.append(0)
  for t in range(len(X)):
    P.append(row)
  return P

def multiply(X, Y):
  P=empty(X, Y)
  #P=[[0, 0], [0, 0], [0, 0]]
  for i in range(len(X)):
    for j in range(len(Y[0])):
      for k in range(len(Y)):
        P[i][j] += X[i][k] * Y[k][j]
  return P

def One(X, Y):
  x=[]
  b=[]
  count=0
  for i in range(len(X)):
    b.append(1)
  x.append(b)
  x.append(X)
  return x

d=[[1, 2], [2, 3], [2, 4]]
b=[[2, 4], [5, 6]]

print(multiply(d,b))
print(empty(d,b))

https://imgur.com/3EVpyaF

Две матрицы выглядят одинаково в окне вывода. Первый - тот, который я определил вручную как P=[[0,0],[0,0],[0,0]]. Второй - тот, который создан из функции empty(). Результат отличается от функции умножения; по какой-то причине оно перезаписывается.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Я получил его на работу. Я использовал понимание вложенного списка для создания нулевой матрицы. Я думаю, что просто добавление нулевого списка, так как строки не работали ранее и испортили измерения или тип списка.

Модифицированная пустая функция:

def empty(X,Y):
 P=[]
 P= [[0 for i in range(len(Y[0]))] for j in range(len(X))]
 return P
0 голосов
/ 11 июля 2019

Дополняет Насер ответ :

Вы можете реализовать свою функцию так, чтобы вам не требовалась переменная P:

def empty(X,Y):
    return [[0 for i in range(len(Y[0]))] for j in range(len(X))]
...