J'écris un morceau de code qui va inverser une matrice avec l'utilisation de mpi4py
. Je reçois une erreur qui me cause des problèmes. J'ai mis 2 variables par défaut m, n
et l'utilisateur insère les nombres dans le processus rank 0
pour remplir la matrice. Le processus rank 0
envoie la matrice aux process 1
et process 2
. Dans process 1
j'initialiser la matrice et le déterminant, calculer le déterminant, et le renvoyer à rank 0
. Dans process 2
, j'initialise la matrice, trouve la matrice inverse et renvoie la matrice inverse au processus 0.matrice inverse Python3 mpi4py EOFError: EOF lors de la lecture d'une ligne
En process 0
Je reçois alors le déterminant et la matrice inverse. Si le déterminant est 0, un message sera envoyé et le programme sortira (la matrice inverse peut être calculée même si le déterminant est 0, mais ce n'est pas correct). Si ce n'est pas 0, le programme imprimera la matrice inverse. Notez que je sais que la mise en œuvre actuelle n'est pas la meilleure façon de paralléliser ce problème, mais je devais partir de quelque part. Le déterminant m'a donné quelques erreurs, donc je l'ai initialisé comme un tableau vide de numpy
de 2 éléments, où le premier élément est le déterminant et le second est 0. J'ai édité le code un peu de ma langue maternelle vers l'anglais il pourrait être lu et compris plus facilement, donc il peut contenir quelques erreurs.
Le problème est que lorsque je veux donner à l'utilisateur le privilège d'écrire la taille de la matrice. J'ai vérifié certaines réponses connexes, et j'ai essayé d'utiliser map()
, raw_input()
, et d'autres options, mais aucune n'a fonctionné.
Le code:
import numpy as np
from numpy.linalg import inv
from scipy.linalg import det
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
m = int(input())
n = int(input())
if rank==0:
matrix = np.zeros((m,n))
determinant = np.zeros((2))
for i in range (0,m):
for j in range(0,n):
print("Enter the value for the field: m = ", i+1, ", n = ", j+1,"\n")
matrix[i][j] = float(input())
comm.Send(matrix, dest=1, tag=0)
comm.Send(matrix, dest=2, tag=0)
comm.Recv(determinant, source=1, tag=0)
comm.Recv(matrix, source=2, tag=0)
if(determinant[0]==0):
print("There is no inverse matrix since the determinant is 0!")
else:
print("Inverse matrix:\n",matrica)
elif rank==1:
matrix = np.zeros((m,n))
determinant = np.zeros((2))
comm.Recv(matrix, source=0, tag=0)
determinant = np.array([[det(matrix)],[0]])
comm.Send(determinant, dest=0)
elif rank==2:
matrix = np.zeros((m,n))
comm.Recv(matrix, source=0, tag=0)
matrix = inv(matrix)
comm.Send(matrix, dest=0)
else:
exit()
L'erreur:
Traceback (most recent call last):
File "lambda.py", line 13, in <module>
m = int(input())
EOFError: EOF when reading a line
Traceback (most recent call last):
File "lambda.py", line 13, in <module>
m = int(input())
EOFError: EOF when reading a line
EDIT: J'utilise PuTTY pour se connecter à un système d'exploitation Debian de l'université.
version Interprète: sys.version_info (majeur = 3, mineur = 5, micro = 1, releaselevel = 'finale', série = 0)
j'entre la ligne de commande: mpirun -np 3 python3 lambda. py, je reçois un EOFError et insérer les chiffres jusqu'à ce que le point où il doit faire quelque chose, quand, au lieu de le faire, il continue de fonctionner comme une boucle infinie. (mieux visible sur la photo) Picture
Ajouté le code pour tracer l'entrée:
m = int(input("Enter number of rows, m = \n"))
n = int(input("Enter number of columns, n = \n"))
Vous mentionnez que vous avez modifié le code de votre langue maternelle à l'anglais. Pourriez-vous s'il vous plaît tester le code révisé et confirmer qu'il se comporte comme votre code natif? Sinon, il ne sert à rien de résoudre le problème. – mech
Comment exécutez-vous réellement le code? Êtes-vous sûr que c'est Python3. –
@MarcoBubi, pourriez-vous s'il vous plaît exécuter ce qui suit soit dans votre interprète, ou enregistrez-le dans un fichier python, exécutez-le, et dites-nous le résultat? Il doit nous indiquer la version de votre interpréteur: 'import sys; print (sys.version_info)' – mech