我希望将不同长度的np.array
散布到不同的等级,但是我发现值已更改,我不知道为什么。
我尝试了很多次,并简化了代码,如下所示。
import numpy as np
import random
from random import seed
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
num = 4
N = num // size + (num % size > rank)
position_x = np.zeros(num,dtype=float)
seed(10059)
for i in range(num):
position_x[i] = round(random.uniform(-5,5),3)
print(position_x)
if rank == 0:
share1 = position_x
else:
share1 = None
count = []
for i in range(size):
if i <= num%size-1:
count += [num//size + 1]
else:
count += [num//size]
pos1 = np.zeros(N, dtype='f')
comm.Scatterv([share1, count, MPI.FLOAT], pos1, root=0)
print(pos1,'from ',rank)
3个处理的结果如下所示。
[-2.275 4.238 -1.637 0.981]
[5177.344] from 1
[-2.275 4.238 -1.637 0.981]
[ 4.172325e-08 -2.034375e+00] from 0
[-2.275 4.238 -1.637 0.981]
[2.264875] from 2
我不知道这些奇怪的数字是从哪里来的。如果正确,结果应为[-2.275 4.238] from 0
,[-1.637] from 1
,[0.981] from 2
。
有人有主意吗?非常感谢。
———————————————————————————————————————————— >
更新:
我发现np.array
中的数字是否为浮点数,将出现此问题。我尝试将DATATYPE更改为MPI.INT
或MPI.F_FLOAT
,但仍然无法使用。
这似乎是由random
引起的,但我需要随机生成该位置。
我真的不知道如何纠正它。