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

并行执行Numpy向量运算

万俟旭
2023-03-14
问题内容

让我们使用例如 numpy.sin()

以下代码将为数组的每个值返回正弦值a

import numpy
a = numpy.arange( 1000000 )
result = numpy.sin( a )

但是我的机器有32个内核,所以我想利用它们。(对于类似的事情,开销可能不值得,numpy.sin()但是我实际上想要使用的功能要复杂得多,并且我将处理大量数据。)

这是最好的方法(阅读:最聪明还是最快):

from multiprocessing import Pool
if __name__ == '__main__':
    pool = Pool()
    result = pool.map( numpy.sin, a )

还是有更好的方法来做到这一点?


问题答案:

一个更好的办法:numexpr

从他们的主页稍微改写了一下:

它是用C编写的多线程VM,可以分析表达式,更高效地重写表达式,并即时将它们编译为代码,从而为内存和cpu受限操作提供接近最佳的并行性能。

例如,在我的4核计算机中,评估正弦仅比numpy快4倍。

In [1]: import numpy as np
In [2]: import numexpr as ne
In [3]: a = np.arange(1000000)
In [4]: timeit ne.evaluate('sin(a)')
100 loops, best of 3: 15.6 ms per loop    
In [5]: timeit np.sin(a)
10 loops, best of 3: 54 ms per loop

文档,包括此处支持的功能。您必须检查或给我们更多信息,以查看numexpr是否可以评估您更复杂的函数。



 类似资料:
  • 问题内容: 假设我有一个形状为(1,256)的行向量。我想将其转换为形状为(256,1)的列向量。您在Numpy中会如何做? 问题答案: 您可以使用 转置 操作来执行此操作: 例: 请注意,原始数组仍将保持不变。转置操作只会复制并转置它。 如果输入阵列是相当1D中,则可以 促进 通过引入新的(singleton)的轴作为所述第二尺寸数组的列向量。下面是一个示例: 对于一维情况,还有另一个选择是使用

  • 1.3 新版功能. 默认情况下,Fabric 会默认 顺序 执行所有任务(详细信息参见 Execution strategy ),这篇文档将介绍 Fabric 如何在多个主机上 并行 执行任务,包括 Fabric 参数设置、任务独立的装饰器,以及命令行全局控制。 它是如何运转的 由于 Fabric 1.x 并不是完全线程安全(以及为了更加通用,任务函数之间并不会产生交互),该功能的实现是基于 Py

  • 我正在尝试并行运行两个exe程序。我想启动它们,等待它们完成后再继续。以下是一个例子: 第一个进程睡眠5秒,第二个进程睡眠10秒。我希望看到进程启动的两条消息和“等待任务”消息。10秒后,请参见“过程完成”。但是,我立即看到“Procs complete”。 任务管理器显示正在运行的进程,同时显示“进程完成”。 那么,我如何从一个程序中启动两个独立的可执行程序,并行运行它们,然后等待它们完成,然后

  • 我有4个@Test方法,希望每个方法都运行3次。我想在12个线程中同时执行所有这些。 我创建了一个testng。像这样的xml文件 如果我设置并行="方法",TestNG在Test1的4个线程中执行4个测试方法,之后对Test2执行相同的操作,然后对Test3执行相同的操作。但是我不想在运行Test2之前等待Test1完成。TestNG能够运行Test1、Test2 有没有办法告诉TestNG不要

  • 我有超过50种不同类型的输入,我在功能文件中的Example关键字下定义了这些输入,执行这些输入需要花费更多的时间。有没有办法并行运行这些输入?。我不想让任何人来测试这种方法。请帮忙。

  • 我有一个任务列表 一个任务可以选择性地依赖于其他任务。 例如: A可以依赖于3个任务:B、C和D B可以依赖于2个任务:C和E 它基本上是一个有向无环图,任务的执行应该只有在依赖任务执行之后才能发生。 现在,在任何时间点,都可能有多个任务可供执行。在这种情况下,我们可以并行运行它们。 关于如何在尽可能多的并行性的同时实现这样的执行,您有什么想法吗?