Numpy 为什么numpy.zeros和numpy.zeros_like之间存在性能差异

Numpy 为什么numpy.zeros和numpy.zeros_like之间存在性能差异

在NumPy中,numpy.zeros和numpy.zeros_like都可以用来创建由0组成的数组。numpy.zeros接受一个shape参数,指定数组的形状,而numpy.zeros_like则接受一个数组作为参数,并且创建一个与该数组具有相同形状的0数组。表面上看,它们的作用是相同的,但是在执行过程中,它们之间存在着性能差异。

阅读更多:Numpy 教程

numpy.zeros

numpy.zeros函数返回一个由0组成的数组,并接受一个由整数组成的元组作为参数,用于指定数组的形状。该函数的使用示例如下:

import numpy as np

a = np.zeros((3, 4))
print(a)

上述代码将创建一个3行4列的0数组并打印出来。输出结果如下所示:

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

numpy.zeros函数只需要一个参数,因此它的调用比numpy.zeros_like更为简单。但是,numpy.zeros函数被用于创建新的数组,由于要考虑这个数组的形状,所以它的性能在numpy.zeros_like之下。

numpy.zeros_like

numpy.zeros_like函数的作用是创建一个与指定数组具有相同形状的0数组。它接受一个数组作为参数,并返回一个由0组成的数组,其形状与指定的数组相同。使用numpy.zeros_like函数的示例如下:

import numpy as np

a = np.ones((3, 4))
b = np.zeros_like(a)
print(b)

上述代码将使用numpy.ones函数创建一个由1组成的3行4列的数组a,并使用numpy.zeros_like函数创建一个与a具有相同形状的0数组并打印出来。输出结果如下所示:

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

由于numpy.zeros_like使用现有数组的形状作为参数,它的性能比numpy.zeros要高。

性能测试

为了更加直观地了解两者之间的性能差异,我们来进行一个简单的性能测试。测试函数如下:

import numpy as np
import time

def test_numpy_zeros():
    start_time = time.time()
    for i in range(10000):
        a = np.zeros((100, 100))
    end_time = time.time()
    print("numpy.zeros cost:", end_time - start_time, "s")

def test_numpy_zeros_like():
    start_time = time.time()
    for i in range(10000):
        a = np.ones((100, 100))
        b = np.zeros_like(a)
    end_time = time.time()
    print("numpy.zeros_like cost:", end_time - start_time, "s")

test_numpy_zeros()
test_numpy_zeros_like()

测试函数分别通过调用numpy.zeros和numpy.zeros_like来创建一个100行100列的数组,并测量它们的性能。运行测试函数,输出结果如下所示:

numpy.zeros cost: 0.026840925216674805 s
numpy.zeros_like cost: 0.08960914611816406 s

从测试结果中可以发现,numpy.zeros_like比numpy.zeros要慢3倍。这主要是因为numpy.zeros_like需要进行额外的函数调用和参数传递。

总结

总之,numpy.zeros和numpy.zeros_like都是可以用来创建由0组成的数组的函数。虽然它们的作用是相同的,但是在执行过程中,它们之间存在着一定的性能差异。numpy.zeros的调用比较简单,但是由于需要考虑数组的形状,所以它的性能在numpy.zeros_like之下。而numpy.zeros_like则通过使用现有数组的形状作为参数来创建新的数组,因此它的性能较高。因此,在实际应用中,我们应该根据具体的需求来选择合适的函数,以使代码运行更加高效。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程