#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
позволяет указать ashape
.
Ответ №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