numpy.cross() 性能不佳

2024-01-25

我一直在进行一些性能测试,以提高我正在编写的宠物项目的性能。这是一个数字运算密集型应用程序,因此我一直在使用 Numpy 作为提高计算性能的一种方式。

然而,接下来的性能测试结果却相当令人惊讶……

测试源代码 (更新了提升和批量提交的测试用例)

import timeit

numpySetup = """
import numpy
left = numpy.array([1.0,0.0,0.0])
right = numpy.array([0.0,1.0,0.0])
"""

hoistSetup = numpySetup +'hoist = numpy.cross\n'

pythonSetup = """
left = [1.0,0.0,0.0]
right = [0.0,1.0,0.0]
"""

numpyBatchSetup = """
import numpy

l = numpy.array([1.0,0.0,0.0])
left = numpy.array([l]*10000)

r = numpy.array([0.0,1.0,0.0])
right = numpy.array([r]*10000)
"""

pythonCrossCode = """
x = ((left[1] * right[2]) - (left[2] * right[1]))
y = ((left[2] * right[0]) - (left[0] * right[2]))
z = ((left[0] * right[1]) - (left[1] * right[0]))
"""

pythonCross = timeit.Timer(pythonCrossCode, pythonSetup)
numpyCross = timeit.Timer ('numpy.cross(left, right)' , numpySetup)
hybridCross = timeit.Timer(pythonCrossCode, numpySetup)
hoistCross = timeit.Timer('hoist(left, right)', hoistSetup)
batchCross = timeit.Timer('numpy.cross(left, right)', numpyBatchSetup) 

print 'Python Cross Product : %4.6f ' % pythonCross.timeit(1000000)
print 'Numpy Cross Product  : %4.6f ' % numpyCross.timeit(1000000) 
print 'Hybrid Cross Product : %4.6f ' % hybridCross.timeit(1000000) 
print 'Hoist Cross Product  : %4.6f ' % hoistCross.timeit(1000000) 
# 100 batches of 10000 each is equivalent to 1000000
print 'Batch Cross Product  : %4.6f ' % batchCross.timeit(100) 

原始结果

Python Cross Product : 0.754945 
Numpy Cross Product  : 20.752983 
Hybrid Cross Product : 4.467417 

最终结果

Python Cross Product : 0.894334 
Numpy Cross Product  : 21.099040 
Hybrid Cross Product : 4.467194 
Hoist Cross Product  : 20.896225 
Batch Cross Product  : 0.262964 

不用说,这不是我所期望的结果。纯 Python 版本的执行速度几乎比 Numpy 快 30 倍。 Numpy 在其他测试中的性能优于 Python 的同等性能(这是预期的结果)。

所以,我有两个相关的问题:

  • 谁能解释为什么 NumPy 在这种情况下表现如此糟糕?
  • 我可以做些什么来修复它吗?

尝试使用更大的数组。我认为只是调用方法的成本numpy这里超出了 Python 版本所需的简单的几个列表访问。如果你处理更大的数组,我想你会看到巨大的胜利numpy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

numpy.cross() 性能不佳 的相关文章

随机推荐

  • 如何连接到 LocalDb

    我使用 SqlLocalDb msi 包安装了 LocalDb 并且可以使用服务器名称使用 SSMS 连接到它 LocalDb v11 0 到目前为止 一切都很好 问题是 当我尝试通过 NET 4 5 应用程序连接到它时 出现错误 服务器未
  • 将动态创建的行中的数据保存到数据库

    我正在使用 Codeigniter 我创建了一个包含不同列的表 我想在单击 按钮时动态创建行 现在我可以使用 jquery 创建行 我想将数据保存到数据库中 当我单击 按钮时 如何将每行的值保存到数据库中 您可以对此使用ajax请求 首先当
  • 如何让在一个进程上运行的参与者向在单独进程上运行的另一个参与者发送消息?

    我想让运行在不同进程 或节点 上的参与者向运行在不同进程 或节点 上的其他参与者发送消息 同时保持容错和负载平衡 我目前正在尝试使用 Akka Cluster 的分片功能来完成此任务 但是 我不确定如何实现这一点 我有以下反映我的种子节点的
  • 致命错误:对 Swift 类使用未实现的初始化程序“init()”

    我正在使用 Markdown TextView 1 将基本 Markdown 添加到UITextView The TextView是一个子类MarkdownTextView 但是 当使用复制和粘贴时 出现以下错误 致命错误 对类使用未实现的
  • Unix 上的递归 mkdir() 系统调用

    阅读具有该名称的 Unix 系统调用的 mkdir 2 手册页后 该调用似乎不会在路径中创建中间目录 而只会在路径中创建最后一个目录 有没有什么方法 或其他函数 可以创建路径中的所有目录 而无需手动解析我的目录字符串并单独创建每个目录 不幸
  • powershell远程处理:非常慢

    如果我从solaris服务器ssh到美国服务器 ssh连接速度非常快 比如删除一个文件很快就能完成 但是为什么powershell远程处理这么慢 我进入远程会话后 然后删除一个项目 需要10多秒才能完成 Enter PSSession co
  • 带有存储枚举的条件枚举开关

    我希望这段代码能够工作 我有一个枚举 其中 Direction Right 的情况采用距离参数 enum Direction case Up case Down case Left case Right distance Int 现在另一个
  • Angular 中 ViewEncapsulation.None 的禁用效果

    如何禁用ViewEncapsulation None的效果 例如 我的一个组件 firstComponent 定义了一个带有一些属性的CSS类 第二个组件使用相同的 css 类 我希望我的 secondComponent 对第一个组件样式表
  • 使用发布/订阅时交互按钮无法正常工作

    我正在用 C 编写一个使用 pub sub 的环聊聊天机器人 这样我就可以在防火墙的一侧托管该机器人 除了卡片内的交互式按钮之外 一切似乎都运行良好 如果我创建具有特定操作方法名称的按钮 机器人会收到具有适当操作方法名称的 CARD CLI
  • 如何打开本地文件系统(Cordova)中的PDF文件?

    我一直在查看这些条目 Link 1 https stackoverflow com questions 16795172 phonegap inappbrowser display pdf 2 7 0 Link 2 https stacko
  • 使用 jdbc 连接访问在 MSSQL 服务器中的 dbo 中创建的表

    我使用以下代码通过java连接MSSQL服务器 Connection conn DriverManager getConnection jdbc sqlserver localhost 1433 DATABASENAME instanceN
  • Objective C 带有 case/switch 的全局常量

    有没有办法在 Objective C 中使用在 case switch 语句中工作的全局 int 常量 这里的技术 http stackoverflow com questions 538996 constants in objective
  • Docker 中的 RabbitMQ - 用户创建未持久

    我遇到了一个问题 用户user1未保留在我使用以下 Dockerfile 创建的容器中 这是什么原因呢 这是 RabbitMQ 的特定问题吗 例如我必须明确指定必须保留用户 FROM dockerfile rabbitmq Define m
  • Keras:改变学习率

    我试图change我的模型在使用不同的学习率进行训练后的学习率 I read here https github com keras team keras issues 888 here https github com keras tea
  • Python脚本计算目录中所有文件的行数

    所以我是 python 新手 我正在尝试编写一个脚本 该脚本迭代目录中的所有 txt 文件 计算每个文件中的行数 空白或注释掉的行除外 然后写入最终输出为 csv 最终输出应如下所示 agprices avi adp 132 5 8 我在将
  • 如何使用bootstrap嵌入谷歌地图?

    我想将地图添加到我的联系页面的 地图和方向 中 我正在逐步尝试谷歌地图嵌入程序 但它不起作用 因为我无法查看地图 我正在使用引导程序 这是我的标记
  • 如何使用 sharex 和 sharey 结合aspect=equal 和 adjustment='box-forced' 在 matplotlib 中创建具有相同比例的子图?

    我正在尝试创建四个子图 其轴代表不同方向上的不同距离范围 km 但右下子图的 x 轴表示计数 所有子图中的所有距离轴应具有相同的比例 此外 顶部的两个子图应共享其 y 轴 左侧的两个子图应共享其 x 轴 按照此issue https git
  • Laravel 多个嵌套视图

    我正在使用 laravel 布局 并且有这样的设置 控制器 public function action index this gt layout gt nest submodule partials stuff this gt layou
  • c++:模板声明中 is_member_function_pointer 的语法

    我有一个带有类似声明的模板 template
  • numpy.cross() 性能不佳

    我一直在进行一些性能测试 以提高我正在编写的宠物项目的性能 这是一个数字运算密集型应用程序 因此我一直在使用 Numpy 作为提高计算性能的一种方式 然而 接下来的性能测试结果却相当令人惊讶 测试源代码 更新了提升和批量提交的测试用例 im