当前位置: 首页 > 面试题库 >

如何使用comm.Scatterv在python中分散numpy数组

严瑞
2023-03-14
问题内容

我正准备编写一个基于MPI的代码,以便使用python和MPI4py进行一些计算。但是,按照该示例,我无法将一个numpy向量散布到核心中。这是代码和错误,有人可以帮助我吗?谢谢。

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)

错误结果是:

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]

谢谢。


问题答案:

数据类型不正确。我应该指定数组的类型:

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


 类似资料:
  • 来源:谷歌面试问题 编写一个例程,以确保输入中的相同元素在输出中的分布最大? 基本上,我们需要以这样一种方式放置相同的元素,使总传播尽可能最大化。 示例: 我一点也不确定,是否有一个最佳多项式时间算法可用于此。此外,除此之外,没有为问题提供其他细节。 我的想法是,计算输入中每个元素的频率,然后将它们排列在输出中,每次排列每个不同的元素,直到所有频率都用完。 我不确定我的方法。 任何方法/想法的人。

  • 问题内容: 有没有更有效的方法来对预先指定的bin中的数组取平均值?例如,我有一个数字数组以及一个与该数组中bin的开始和结束位置相对应的数组,我只想取这些bin中的均值?我下面有执行此操作的代码,但我想知道如何减少和改进它。谢谢。 问题答案: 它可能更快更容易使用: 替代方法是使用: 自己尝试哪个更快… :)

  • 问题内容: 我在设置值的Keras后端功能上遇到麻烦。我正在尝试将模型从PyTorch转换为Keras,并尝试设置Keras模型的权重,但是权重似乎没有被设置。注意:我实际上并没有使用np.ones进行设置,仅以示例为例。 我试过了… 加载现有模型 创建一个简单的模型 然后使用set_weights或set_value 要么… 之后,我将调用以下任一方法: 而且似乎没有设置任何权重。返回与以前相同

  • 问题内容: 可以散列吗? 例如,我知道元组的散列是可能的: 但是可以对a进行哈希处理吗? 可能的解决方案: 这里是对列表哈希的非常深入的解释。 问题答案: 就试一试吧: 所以,你可以得到的,并因为是不可变的,你不能做到这一点,并因为他们是可变的。

  • 本文向大家介绍Python如何实现大型数组运算(使用NumPy),包括了Python如何实现大型数组运算(使用NumPy)的使用技巧和注意事项,需要的朋友参考一下 问题 你需要在大数据集(比如数组或网格)上面执行计算。 解决方案 涉及到数组的重量级运算操作,可以使用NumPy库。NumPy的一个主要特征是它会给Python提供一个数组对象,相比标准的Python列表而已更适合用来做数学运算。下面是

  • 问题内容: 我尝试在Python中导入NumPy,但未成功: 我怎样才能解决这个问题? 问题答案: 信息是不言自明的;调用Python时,您的工作目录不应是NumPy源目录;应该安装NumPy,并且您的工作目录应该是该目录所在的目录。