Я хочу разбросать разные длины 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
являются числами с плавающей запятой, у него возникнет эта проблема. Я пытаюсь изменить тип данных на MPI.INT
или MPI.F_FLOAT
, но он все равно не работает.
Кажется, это вызвано random
, но мне нужно случайным образом сгенерировать позицию.
Я действительно не знаю, как это исправить.