Манипуляция массивом Numpy — работа с добавлением и вычитанием, но не умножение и другие методы

#python #numpy

Вопрос:

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

 ValueError: shapes (3,1,3) and (3,1,3) not aligned: 3 (dim 2) != 1 (dim 1)
 

И когда я пытаюсь использовать np.transpose() , это выдает мне эту ошибку:

 numpy.core._exceptions.UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U11'), dtype('<U11')) -> dtype('<U11')
 

«

 def Matrices():
    menu=("Pleae enter an option from the menu belownn1.Additionn2.Subtractionn3.Multiplicationn4.Calculate row and column averagesn5.transposen6.Exit")
    user_input = 0
    print("Create first matrix")
    matrix1 = Create_Matrices()
    print("Create second matrix")
    matrix2 = Create_Matrices()
    while user_input!=4:
        user_input = int(input(menu "n"))
        if user_input == 1:
            C = matrix1 matrix2
            print(C)
        if user_input == 2:
            C = matrix1-matrix2
            print(C)
        if user_input == 3:
            C= matrix1.dot(matrix2)
            print(C) 
        if user_input == 4:
            C1_column = matrix1.mean(axis=0)
            C2_column = matrix2.mean(axis=0)
            print("The mean of matrix one's columns are ")
            print(C1_column)
            print("The mean of matrix two's columns are ")
            print(C2_column)
            C1_row = matrix1.mean(axis=1)
            print("The average of matrix one's rows are ")
            print(C1_row)
            C2_row = matrix2.mean(axis=1)
            print("The average of matrix two's rows are")
            print(C2_row)
            #print("The row averages for matrix 1 are: " C1_row "nThe row averages for matrix 2 are: " C2_row)
        if user_input == 5:
            matrix1 = np.transpose(matrix1)
            matrix2 = np.transpose(matrix2)
            print(matrix1 "n" matrix2)
        if user_input ==6:
            Exit()
 

«

Комментарии:

1. » «- это элементарное сложение. * является элементарным умножением, подчиняющимся тем же правилам измерения ( broadcasting ). dot является матричным умножением с разными правилами ( прочитайте его документы ).

2. С чем ты пытаешься это сделать 5 ? 1 похоже на числовое сложение, но у этого есть строка. Для строк -это соединение строк. Вы хотя бы посмотрели на то, что transpose производит, и проверили, влияет ли это на это действие? При написании кода тестируйте части задач в интерактивном сеансе.

Ответ №1:

 numpy.core._exceptions.UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U11'), dtype('<U11')) -> dtype('<U11')
 

Эта ошибка означает, что ваш массив содержит поля юникода. Убедитесь, что ваш массив содержит только числа.