Cómo dispersar una matriz numpy en python usando comm.Scatterv

Estoy tratando de escribir un código basado en MPI para hacer algún cálculo usando python y MPI4py. Sin embargo, siguiendo el ejemplo, NO PUEDO dispersar un vector numpy en los núcleos. Aquí está el código y los errores, ¿hay alguien que pueda ayudarme? Gracias.

import numpy as np from mpi4py import MPI comm = MPI.COMM_WORLD size = comm.Get_size() rank = comm.Get_rank() n = 6 if rank == 0: d1 = np.arange(1, n+1) split = np.array_split(d1, size) split_size = [len(split[i]) for i in range(len(split))] split_disp = np.insert(np.cumsum(split_size), 0, 0)[0:-1] else: #Create variables on other cores d1 = None split = None split_size = None split_disp = None split_size = comm.bcast(split_size, root = 0) split_disp = comm.bcast(split_disp, root = 0) d1_local = np.zeros(split_size[rank]) comm.Scatterv([d1, split_size, split_disp, MPI.DOUBLE], d1_local, root=0) print('rank ', rank, ': ', d1_local) 

Y el resultado del error es:

 rank 2 : [ 2.47032823e-323] rank 3 : [ 2.96439388e-323] rank 0 : [ 4.94065646e-324 9.88131292e-324] rank 1 : [ 1.48219694e-323 1.97626258e-323] 

Gracias.

El tipo de datos no es correcto. Debería especificar el tipo de la matriz:

 d1 = np.arange(1, n+1, dtype='float64')