Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
逆矩阵Python3 mpi4py EOFError:读取一行时为EOF_Python_Python 3.x_Numpy_Matrix_Mpi4py - Fatal编程技术网

逆矩阵Python3 mpi4py EOFError:读取一行时为EOF

逆矩阵Python3 mpi4py EOFError:读取一行时为EOF,python,python-3.x,numpy,matrix,mpi4py,Python,Python 3.x,Numpy,Matrix,Mpi4py,我正在编写一段代码,使用mpi4py将矩阵求逆。我犯了一个错误,给我带来了麻烦 我放入两个默认变量m,n,用户将数字插入rank 0过程以填充矩阵。进程秩0将矩阵发送到进程1和进程2。在过程1中,我初始化矩阵和行列式,计算行列式,并将其发送回秩0。在进程2中,我初始化矩阵,找到逆矩阵,然后将逆矩阵发送回进程0 在过程0中,我随后接收行列式和逆矩阵。如果行列式为0,将发送一条消息,程序将退出(即使行列式为0,也可以计算逆矩阵,但它不正确)。如果不是0,程序将打印逆矩阵 注意,我知道当前的实现并不是

我正在编写一段代码,使用
mpi4py
将矩阵求逆。我犯了一个错误,给我带来了麻烦

我放入两个默认变量
m,n
,用户将数字插入
rank 0
过程以填充矩阵。进程
秩0
将矩阵发送到
进程1
进程2
。在
过程1
中,我初始化矩阵和行列式,计算行列式,并将其发送回
秩0
。在
进程2
中,我初始化矩阵,找到逆矩阵,然后将逆矩阵发送回进程0

过程0
中,我随后接收行列式和逆矩阵。如果行列式为0,将发送一条消息,程序将退出(即使行列式为0,也可以计算逆矩阵,但它不正确)。如果不是0,程序将打印逆矩阵

注意,我知道当前的实现并不是并行处理这个问题的最佳方式,但我需要从某个地方开始

行列式给了我一些错误,所以我将它初始化为一个2个元素的空
numpy
数组,其中第一个元素是行列式,第二个元素是0。我将代码从我的母语编辑成了英语,这样可以更容易地阅读和理解,因此可能包含一些错误

问题是,当我想给用户写矩阵大小的特权时。我检查了一些相关的答案,并尝试使用
map()
raw_input()
,以及其他选项,但都没有成功

守则:

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()
错误:

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

你的问题与矩阵无关:那是你的线路

m = int(input())
正在所有节点上发生。您需要在根节点上执行此操作,然后以您喜欢的方式(例如通过广播)共享结果。例如,如果我们从

from mpi4py import MPI

x = input("enter x: ")
我们得到

(3.5) dsm@winter:~/coding/mpipar$ mpirun -np 3 python m1.py
enter x: enter x: Traceback (most recent call last):
  File "m1.py", line 3, in <module>
    x = input("enter x: ")
EOFError: EOF when reading a line
enter x: Traceback (most recent call last):
  File "m1.py", line 3, in <module>
    x = input("enter x: ")
EOFError: EOF when reading a line
然后我们得到

(3.5) dsm@winter:~/coding/mpipar$ mpirun -np 3 python m2.py
enter x: abc
rank 0 thinks x is abc
rank 1 thinks x is abc
rank 2 thinks x is abc

你的问题与矩阵无关:那是你的线

m = int(input())
正在所有节点上发生。您需要在根节点上执行此操作,然后以您喜欢的方式(例如通过广播)共享结果。例如,如果我们从

from mpi4py import MPI

x = input("enter x: ")
我们得到

(3.5) dsm@winter:~/coding/mpipar$ mpirun -np 3 python m1.py
enter x: enter x: Traceback (most recent call last):
  File "m1.py", line 3, in <module>
    x = input("enter x: ")
EOFError: EOF when reading a line
enter x: Traceback (most recent call last):
  File "m1.py", line 3, in <module>
    x = input("enter x: ")
EOFError: EOF when reading a line
然后我们得到

(3.5) dsm@winter:~/coding/mpipar$ mpirun -np 3 python m2.py
enter x: abc
rank 0 thinks x is abc
rank 1 thinks x is abc
rank 2 thinks x is abc

您提到您已将代码从您的母语编辑为英语。请您测试修改后的代码并确认其行为与您的本机代码相同,好吗?否则,对我们来说,排除故障是毫无意义的。您实际上是如何执行代码的?“您确定它是Python3吗。@MarcoBubi,您可以在解释器中运行以下内容,或者将其另存为python文件,运行它,并告诉我们结果吗?”?它应该告诉我们您的解释器版本:
import sys;打印(sys.version\u info)
sys.version\u info(major=3,minor=5,micro=1,releaselevel='final',serial=0)我正在使用一个油灰连接到大学的终端,我确定它是python3,我执行的coce是:mpirun-np 3 python3 lambda.py,因为lambda.py是文件名@ali_m如果我设置m=3和n=3,则在出现错误后,没有输入。执行应在该行暂停,直到键入输入并单击返回。你的情况如何?您可以通过添加提示字符串使此行为更加明显,例如,
s=input(“输入m:”)
。您提到您已将代码从母语编辑为英语。请您测试修改后的代码并确认其行为与您的本机代码相同,好吗?否则,对我们来说,排除故障是毫无意义的。您实际上是如何执行代码的?“您确定它是Python3吗。@MarcoBubi,您可以在解释器中运行以下内容,或者将其另存为python文件,运行它,并告诉我们结果吗?”?它应该告诉我们您的解释器版本:
import sys;打印(sys.version\u info)
sys.version\u info(major=3,minor=5,micro=1,releaselevel='final',serial=0)我正在使用一个油灰连接到大学的终端,我确定它是python3,我执行的coce是:mpirun-np 3 python3 lambda.py,因为lambda.py是文件名@ali_m如果我设置m=3和n=3,则在出现错误后,没有输入。执行应在该行暂停,直到键入输入并单击返回。你的情况如何?您可以通过添加提示字符串使此行为更加明显,例如,
s=input(“输入m:”)
。是的,它可以工作!谢谢我知道必须这样做,只是不知道怎么做,对python来说是个新手。我想我需要再检查一下文件派斯,它起作用了!谢谢我知道必须这样做,只是不知道怎么做,对python来说是个新手。我想我需要再检查一下文件P