【问题标题】:Finding maximum value in Python vs. C++在 Python 与 C++ 中找到最大值
【发布时间】:2016-06-16 01:43:32
【问题描述】:

我只是好奇为什么在 C++ 中找到最大值比在 Python3 中更快。这是我的两种语言的代码的 sn-p:

C++:

int main() {
    int arr[] = {45, 67, 89};
    int temp = 0;

    for(int n = 0; n < 3; n++) {
        if(arr[n] > temp) 
            temp = arr[n];
    }

    cout << "Biggest number: " << temp << endl;
}

Python:

def Main():
    numbers = ['87', '67', '32', '43']
    print(max(numbers))

if __name__ == "__main__":
    Main()

正如代码中所示,与在 Python 中使用 max() 方法相比,我通过循环数组中的每个元素来找到 C++ 中的最大值。

然后我在终端上运行代码以查找它们的执行时间,发现大约需要 0.006s(C++) 和 0.032s(Python)。有没有办法进一步缩短 Python 的执行时间?

【问题讨论】:

  • "在 C++ 中查找最大值比在 Python3 中慢" ...这与您的数据所说的相反
  • 您不妨使用std::max_element 来匹配不涉及重新发明代码的Python 单线。
  • 您是否使用启用了优化的编译代码对此进行了测试?如果没有,这是没有意义的。请发布您用于编译示例的命令行。如果是 Visual Studio,请创建“发布”版本,而不是“调试”版本。

标签: c++ python-3.x execution-time


【解决方案1】:

Python 是一种解释型语言。 Python 必须使用 Python 代码读取文本文件,对其进行解析,然后才开始执行它。

到 C++ 代码执行时,C++ 编译器已经完成了将 C++ 编译为由 CPU 直接执行的本机机器语言代码的所有繁重工作。

可以预编译Python代码;这将节省一些开销,但 C++ 代码仍将受益于 C++ 编译时优化。对于较小的数组大小,激进的 C++ 编译器可能会展开循环,甚至可能在编译时而不是在运行时计算最大值;所以你最终执行的是:

cout << "Biggest number: " << 89 << endl;

这是理论上 Python 也可以做到的事情;但是,在运行时,这将需要更多的 CPU 周期才能计算出来。

【讨论】:

    【解决方案2】:

    假设您使用的向量比上面的玩具示例更大,我会给 numpy 一个机会。

    # set up a vector with 50000 random elements
    a = np.random.randint(0,100000,50000)
    
    max_val = np.max(a)
    

    相对于循环非常快。

    我的电脑显示使用 np.max 比 python 中内置的 max() 操作快 12 倍。 C++ 会更快,因为它是一种编译语言。 (Numpy 封装了经过优化的 C 代码的低级包。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多