Найти - Пользователи
Полная версия: Перемножение квадратных матриц 4 на 4
Начало » Python для экспертов » Перемножение квадратных матриц 4 на 4
1 2
Volobuev_Ilya
from NumPy import *
def Mult(str1,str2): # строки в виде 0;2;6
   arr1=str1.split(';')
   arr2=str2.split(';')
   if len(arr1)==len(arr2):
      for x in arr:
         res=res+arr1[x]*arr2[x]
      return res
   else:
   return "Не могу перемножить."
a=[[input() for y in range(4)] for x in range(4)]
b=[[input() for y in range(4)] for x in range(4)]
res=[[input() for y in range(4)] for x in range(4)]
for y in range(4):
   for x in range(4):
      res[y][x]=Mult(';'.join(a[y],';'.join(b[:,x])

Написал такой код. Верный он?
doza_and
Volobuev_Ilya
Верный он?
нет
Volobuev_Ilya
Где ошибка можете подсказать?
JOHN_16
Зачем вам модуль numpy если вы им не пользуетесь, Вот вам пример, если что не ясно - можно почитать в документации к NumPy про то что такое array, reshape, dot.
>>> import numpy as np
>>> a = np.array(range(16))
>>> a = a.reshape(4,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> b=np.array(range(15,-1,-1))
>>> b = b.reshape(4,4)
>>> b
array([[15, 14, 13, 12],
       [11, 10,  9,  8],
       [ 7,  6,  5,  4],
       [ 3,  2,  1,  0]])
>>> a*b
array([[ 0, 14, 26, 36],
       [44, 50, 54, 56],
       [56, 54, 50, 44],
       [36, 26, 14,  0]])
>>> np.dot(a, b)
array([[ 34,  28,  22,  16],
       [178, 156, 134, 112],
       [322, 284, 246, 208],
       [466, 412, 358, 304]])
Volobuev_Ilya
Спасибо, конечно.
НО мне надо без NumPy.
Volobuev_Ilya
В функцию Mult хочу передать строку списка a и столбец списка b.
JOHN_16
Volobuev_Ilya
НО мне надо без NumPy.
Тогда поясните назначение первой строчки кода в вашем первом посте.
Volobuev_Ilya
Тогда она не нужна.
Volobuev_Ilya
def Mult(arr1,arr2):
   if len(arr1)==len(arr2):
      for x in arr:
         res=res+arr1[x]*arr2[x]
      return res
   else:
   return "Не могу перемножить."
a=[[input() for y in range(4)] for x in range(4)]
b=[[input() for y in range(4)] for x in range(4)]
res=[[input() for y in range(4)] for x in range(4)]
for y in range(4):
   for x in range(4):
      res[y][x]=Mult(a[y],b[:,x])
Может так?
JOHN_16
А давайте я расскажу вам про концепцию тестов. Очень кратко. Допустим вы написали функцию которая делает что то с вхрдными данными и возвращает результат. Как понять что функция правильно работает? Ее надо протестировать. у вас есть некие входные данные A в результате обработки функцией FOO должен получиться результат B. Если ваша функция не выполняет это условие т.е. дает результат C то она работает неверно.
В вашем случае у вас входные данные это 2 матрицы а выходные 1 матрица. Вы можете выбрать тестовые матрицы и вручную или иначе перемножить их .
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB