n-мерное матричное умножение python

Я делаю программу на Python, которая умножает две матрицы размерности, которую вводит пользователь. У меня проблема в том, что пользователь должен вводить значения для каждой строки ввода, а моя программа может получить значение только для каждого ввода. Я пытался использовать .split(), но когда это происходит, умножение отправляет мне эту ошибку:

TypeError: невозможно умножить последовательность на не-int типа «список».

Мой код:

matriza=[]
matrizb=[]
matrizc=[]
orden=int(input("Ingresa el orden de las matrices: "))

#Para obtener la primer matriz
for i in range(0,orden):
    matriza.append([0]*orden)
for j in range(0,orden):
    matrizb.append([0]*orden)
for k in range(0,orden):
    matrizc.append([0]*orden)
for i in range(0,orden):
    for j in range(0,orden):
        matriza[i][j]=int(input("entrada renglon para la primer         matriz"))

print "La primer matriz que introdujiste fue:" "\n" ,matriza, "\n"

#Para obtener la segunda matriz
for i in range(0,orden):
    for j in range(0,orden):
        matrizb[i][j]=int(input("entrada renglon para la segunda matriz"))
print "La segunda matriz que introdujiste fue:" "\n" ,matrizb, "\n"

#Para la multiplicación de las dos matrices
for i in range(0,orden):
    for j in range(0,orden):
        for k in range(0,orden):

            matrizc[i][j]+=matriza[i][k]*matrizb[k][j]
print "La matriz que resulta de multiplicar las matrices que   introdujiste es:" "\n" ,matrizc

person Elias    schedule 06.05.2016    source источник


Ответы (2)


Во-первых, поскольку вы используете Python 2 (судя по синтаксису print), вы должны использовать raw_input вместо input.

Если вы хотите, чтобы пользователь предоставил все значения строки в одной строке ввода, вы должны использовать [int(x) for x in raw_input().split()]. Вероятно, вы присвоили результат split ячейке матрицы вместо того, чтобы использовать ее элементы для заполнения всей строки, когда раньше у вас возникали проблемы:

matriza=[]
matrizb=[]
matrizc=[]
orden=int(input("Ingresa el orden de las matrices: "))

for i in range(orden):
    matriza.append([int(x) for x in raw_input("Enter a row of matrix A:").split()])
...
person user2357112 supports Monica    schedule 06.05.2016

В Python вы можете принимать списки непосредственно в качестве входных данных. Бывший:

matrixA = input("Please enter Matrix A")

Пользователь может ввести что-то вроде этого:

[[1,2],[3,4]]

Теперь вы можете непосредственно приступить к своим расчетам. Что касается вашего подхода в вашей программе, если вы использовали split, вам необходимо преобразовать ввод в int. Split создает массив объектов str. str нельзя умножать, поэтому вы столкнулись с ошибкой TypeError. Хотя Python умен и может автоматически приводить переменные во многих случаях, он не может делать это всегда, и нам нужно быть разными в этом отношении.

person Keshav Pandey    schedule 06.05.2016
comment
Использование функции input в Python 2 — очень плохая привычка, потому что злоумышленник может ввести что-то вроде __import__('os').system("whatever") и установить кейлоггер или удерживать ваши файлы с целью получения выкупа или других неприятных вещей. - person user2357112 supports Monica; 06.05.2016
comment
Я согласен с @user2357112: недостатки безопасности, которые он или она только что продемонстрировали, являются причиной того, что input Python 2 был полностью удален из Python 3 (который переименовал старый raw_input в input). Я думаю, что предупреждение в описании Python 2 для input слишком тонкое . Он просто говорит: рассмотрите возможность использования функции raw_input()... без большого красного прямоугольника, который окружает недостатки безопасности, упомянутые в других документах Python. - person Kevin J. Chase; 06.05.2016