在Python与C 中找到最大值

Finding maximum value in Python vs. C++

本文关键字:最大值 Python      更新时间:2023-10-16

我很好奇为什么在C 中找到最大值比Python3中的最大值要快。这是两种语言中我代码的片段:

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.006(C )和0.032(Python)。有没有办法进一步缩短python的执行时间?

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

到执行C 代码时,C 编译器已经完成了将C 编译到本机机器语言代码中的所有繁重升降机,该机器语言代码直接由CPU执行。

可以预编译Python代码;这样可以节省一些开销,但是C 代码仍然将获得C 编译时优化的好处。较小的数组尺寸,具有侵略性的C 编译器可能会展开循环,甚至可能在编译时计算最大值,而不是在运行时计算。因此,您最终执行的只是:

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

这是理论上,python也可以做的事情;但是,在运行时,这将需要更多的CPU周期。

假设您使用的矢量比上面的玩具示例更大,我会给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代码的低级软件包。)