Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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
Python MPI4不允许我发送和接收dtype=object的数组_Python_Numpy_Parallel Processing_Mpi_Mpi4py - Fatal编程技术网

Python MPI4不允许我发送和接收dtype=object的数组

Python MPI4不允许我发送和接收dtype=object的数组,python,numpy,parallel-processing,mpi,mpi4py,Python,Numpy,Parallel Processing,Mpi,Mpi4py,我尝试使用comm.send()和comm.Recv发送和接收一个数为dtype=object的numpy数组,但我遇到了错误,似乎无法调试它。我试图发送的数组由2列组成:1列字符串和1列整数 from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() data_array = np.empty(100,2), dtype=object) data_array[:,0] = var_1 data_array[:,1]

我尝试使用comm.send()和comm.Recv发送和接收一个数为dtype=object的numpy数组,但我遇到了错误,似乎无法调试它。我试图发送的数组由2列组成:1列字符串和1列整数

from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()

data_array = np.empty(100,2), dtype=object)
data_array[:,0] = var_1
data_array[:,1] = var_2

(data_array_0, data_array_1) = np.array_split(data_array, 2)
data_array_0 = np.ascontiguousarray(data_array_0, dtype = object)
data_array_1 = np.ascontiguousarray(data_array_1, dtype = object)


if rank == 0:
    comm.Send(data_array_1, dest=1)

elif rank == 1:
    data_array_1 = np.empty([data_array_row_1, data_array_col], dtype = object)
    comm.Recv(data_array_1, source=0)  # <--- the line that's causing the error
从MPI4p导入MPI
comm=MPI.comm_WORLD
秩=通信获取秩()
数据(数组=np.empty(100,2),数据类型=object)
数据数组[:,0]=变量1
数据数组[:,1]=变量2
(数据数组0,数据数组1)=np.数组拆分(数据数组,2)
data\u array\u 0=np.ascontiguousarray(data\u array\u 0,dtype=object)
data\u array\u 1=np.ascontiguousarray(data\u array\u 1,dtype=object)
如果秩==0:
通信发送(数据数组1,目标=1)
elif秩==1:
data\u array\u 1=np.empty([data\u array\u row\u 1,data\u array\u col],dtype=object)

comm.Recv(data_array_1,source=0)#对于numpy数组,必须使用
send
Recv
(小写):

如图所示:

变量
MPI.Comm.send()
MPI.Comm.recv()
MPI.Comm.sendrecv()
可以与一般Python对象通信


有什么问题吗?您不明白为什么不能以这种方式使用对象数据类型?或者您不明白为什么数组是object dtype?所以object dtype不能与comm.Send和comm.Recv一起使用?如果是这种情况,那么有没有任何方法可以使用send和Recv发送字符串数据?
Traceback (most recent call last):
  File "data_clean_parallel_1.py", line 156, in <module>
    comm.Recv(data_array_1, source=0)
  File "mpi4py/MPI/Comm.pyx", line 283, in mpi4py.MPI.Comm.Recv
  File "mpi4py/MPI/msgbuffer.pxi", line 402, in mpi4py.MPI.message_p2p_recv
  File "mpi4py/MPI/msgbuffer.pxi", line 388, in mpi4py.MPI._p_msg_p2p.for_recv
  File "mpi4py/MPI/msgbuffer.pxi", line 155, in mpi4py.MPI.message_simple
  File "mpi4py/MPI/msgbuffer.pxi", line 101, in mpi4py.MPI.message_basic
KeyError: 'O'