Определение матрицы: ‘A’ не определено

#python #numpy

#python #тупой

Вопрос:

Я написал эту функцию на python, которая задала значение, и у меня была бы квадратная матрица со случайными значениями. Но выполнение процедуры выдает следующую ошибку: A' is not defined

Как мне это сделать?

 import numpy as np
import scipy.stats as spstats
import scipy.linalg as la
import random



def generaMatrice(n):
for i in range(n-1):
        for j in range(n-1):    

            A[i][j]= random.randint(1,100) 



AI=np.linalg.inv(A)

return A, AI

A, AI = generaMatrice(n)
print(A)
print(AI)
L,U,P=calcoloLU(A)
X = calcolaInv(L,U,P)#INVERSA CALCOLATA CON LU 
I=np.asmatrix(np.eye(n)) #metti n

print(X)

resRel = (la.norm(np.dot(A,X)-I,2))/(la.norm(I,2))        
errRel = la.norm(X-AI,2)/la.norm(AI,2)

nCond = la.norm(A,2)*la.norm(X,2)
maggErr = nCond*resRel
 

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

1. Ваш код отформатирован неправильно. Не могли бы вы скопировать и вставить код в свой вопрос, выделить код и использовать {} инструмент форматирования кода над текстовой областью (или нажать Ctrl-k).

2. В generaMatrix вы пытаетесь установить A[i][j]=... , но вы никогда не создавали A массив правильной формы. Вот где он жалуется A на то, что не определен, верно? Если вы определяете 2d-массив, A[i,j]=... это лучший способ адресации элемента. Но вам не нужно этого делать, поскольку randint позволяет указать a shape .

Ответ №1:

Существуют некоторые общие ошибки при форматировании вашего кода, например, первый оператор return выходит за рамки generaMatrice функции. Сказав это, вы можете просто сделать

 A=np.random.randint(1,100,(n,n))
AI=np.linalg.inv(A)
 

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

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

 def generaMatrice(n):
    for i in range(n-1):
        for j in range(n-1):    
            A[i][j]= random.randint(1,100) 
     AI=np.linalg.inv(A)
     return A,AI