为什么在 Python 中处理已排序数组并不比处理未排序数组快?

2024-02-25

在这篇文章中为什么处理排序数组比处理随机数组更快 https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array,它说分支预测是排序数组性能提升的原因。

但我只是用Python尝试了这个例子;我认为排序数组和随机数组之间没有区别(我尝试了 bytearray 和 array;并使用 line_profile 来分析计算)。

我错过了什么吗?

这是我的代码:

from array import array
import random
array_size = 1024
loop_cnt = 1000
# I also tried 'array', and it's almost the same
a = bytearray(array_size)
for i in xrange(array_size):
    a.append(random.randint(0, 255))
#sorted                                                                         
a = sorted(a)
@profile
def computation():
    sum = 0
    for i in xrange(loop_cnt):
        for j in xrange(size):
            if a[j] >= 128:
                sum += a[j]

computation()
print 'done'

我可能是错的,但我看到链接的问题和您的示例之间存在根本区别:Python 解释字节码,C++ 编译为本机代码。

在 C++ 代码中if直接翻译成cmp/jl序列,CPU 分支预测器可以将其视为特定于该周期的单个“预测点”。

在Python中,比较实际上是几个函数调用,所以有(1)更多的开销,(2)我认为执行该比较的代码是解释器中用于每个其他整数比较的函数 - 所以它是一个“预测点”而不是特定于当前块,这使得分支预测器更难正确猜测。


Edit: 另外,如中所述this http://www.jilp.org/vol5/v5paper12.pdf论文中,解释器内部有更多的间接分支,因此 Python 代码中的这种优化可能会被解释器本身的分支错误预测所掩盖。

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

为什么在 Python 中处理已排序数组并不比处理未排序数组快? 的相关文章

随机推荐

  • 如何对 REST 视图类使用 @condition 装饰器

    我正在尝试使用 ETAG HTTP 标头发送 304 NOT MODIFIED 响应 使用以下代码 class MyView GenericAPIView serializer class MySerializer condition et
  • grails 将 svn 修订版添加到 app.version

    我正在尝试将 svn 修订版添加到我的app version不需要 ant 或其他类似的外部工具 看来我可以加入 Events groovy对此 但文档相对较少 有人知道怎么做吗 This http grails 1312388 n4 na
  • JApplet NoClassDefFoundError

    我正在 Eclipse 上编写 Japplet 它时不时地停止在 html 页面上工作 以下是错误 Exception in thread thread applet main MapGenerator class 1 java lang
  • 有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?

    长话短说 几十个页面没有使用母版页 对于新模块 我创建了一个带有菜单控件的母版页 菜单控件已经存在 这样我就可以在我现在创建的大约六个页面上获得相同的外观 由于内容页使用母版页 因此菜单控件的名称更改为ct100 Menu1而不仅仅是Men
  • 使用 C# 编辑 DataGridview 并将其保存在数据库表中

    我使用 MYSQL Server 作为我的项目后端 我有一个 DataGridView 它填充了数据库中的数据 当我在 DataGridView 单元格中进行更改并单击保存按钮时 数据需要在 DataGridView 和数据库表中更改 这是
  • 新的CSS样式声明

    我正在尝试使用浏览器的内置类型CSSStyleDeclaration以编程方式传递和修改样式 这很方便 因为 cssText财产 然而 new CSSStyleDeclaration 抛出一个Illegal Constructor错误 所以
  • Gradle 以非零退出值 1 完成

    我刚刚在 libgdx 中生成了一个项目并导入到 eclipse 编译了一些依赖项 现在我得到了 Error Gradle Execution failed for task android compileDebugAidl com and
  • 如何选择自动完成下拉列表中的第一个元素

    如果没有元素 任何人都可以帮助我如何选择自动完成下拉列表的第一个元素 被选中 我尝试使用自动对焦 为键盘事件工作 如果我使用鼠标 第一个元素不会选择自动聚焦的元素 visit here https stackoverflow com a 9
  • 在 Swift 中使用 NSURL 读取文本文件

    我想读取并显示位于 URL 的文本文件的内容 我正在为 Yosemite 编写 Mac 应用程序 我需要使用 Swift 但我坚持这样做 这是我的代码 let messageURL NSURL string http localhost 8
  • 任务并行库 INotifyPropertyChanged 不抛出异常?

    我有一个 wpf 项目 我在绑定到文本框的属性上使用 INotifyPropertyChanged 我正在使用任务 TaskParallelLibrary 在不同的线程上更新此值 它已正确更新并且不会引发异常 我认为它会抛出异常 因为它是在
  • Angular 4 - Http 请求错误:您在需要流的地方提供了“未定义”

    在尝试执行 HTTP Post 请求时 我收到以下错误 auth service ts c694 156 请求新的时出错 密码 错误消息 您在流所在位置提供了 未定义 预期的 您可以提供 Observable Promise Array 或
  • 如何使用uiwebview显示一些网页?

    如何使用 uiwebview 显示某个 url 请求的网页 我不知道该怎么做 谁能告诉我该怎么做 有开源的吗 谢谢 NSString urlAddress http www google com NSURL url NSURL URLWit
  • 如何更加重视机器学习中的某些特征?

    如果使用像 scikit learn 这样的库 如何为 SVM 这样的分类器的输入中的某些特征分配更多权重 这是人们做还是不做的事 首先 你可能不应该这样做 机器学习的整个概念是使用统计分析分配最佳权重 你在这里干扰了整个概念 因此你需要非
  • 将列表传递给 Tcl 过程

    将列表传递给 Tcl 过程的规范方法是什么 如果我能得到它 以便列表自动扩展为可变数量的参数 我真的很喜欢它 所以像这样 set a b c myprocedure option1 option2 a and myprocedure opt
  • 在 IE 和 Chrome 中上传之前预览图像

    我正在尝试设计一个模块 在用户将图像上传到数据库之前 我想在其中向用户显示图像的预览 我找到了一个适用于 Firefox 但不适用于 IE 和 Chrome 的解决方案 有人可以帮助我吗 这是我的代码 function imageURL i
  • 这个空白隐藏在哪里?

    我有一个字符向量 它是一些 PDF 抓取的文件pdftotext 命令行工具 一切都 幸福地 排列得很好 然而 该向量充满了一种空白类型 无法使用正则表达式 gt test 1 Address Clinic Information Stor
  • whereis python 和 python --version 之间的矛盾

    在一个 Python 环境中 我输入whereis python 并得到以下信息 python usr bin python2 6 usr bin python2 6 config usr bin python usr lib python
  • 如何通知用户NPM包版本更新?

    我用 Node JS 编写了一个 CLI 工具并发布到NPM https www npmjs com package rapid react 每次在终端中运行时 我都需要通知用户可用的新版本及其类型 补丁 次要 主要 以便他 她可以相应地更
  • 如何计算时间复杂度为 O(n log n) 的 XOR(二元)卷积

    是按位异或运算 我认为Karatsuba算法可能可以解决该问题 但是当我尝试在Karatsuba算法中使用XOR代替 时 很难得到子问题 The 卷积定理 https en wikipedia org wiki Convolution th
  • 为什么在 Python 中处理已排序数组并不比处理未排序数组快?

    在这篇文章中为什么处理排序数组比处理随机数组更快 https stackoverflow com questions 11227809 why is processing a sorted array faster than an unso