Numpy 为什么使用zeros能够节省存储空间

Numpy 为什么使用zeros能够节省存储空间

在本文中,我们将介绍numpy中使用zeros能够减少存储空间的原因。numpy是一个Python平台上高性能的科学计算库,其在数值计算、线性代数、统计分析等方面都有非常出色的表现和广泛的应用。它可以通过数组的方式来存储和处理数据,而zeros作为其中一个非常重要的函数,能够极大地节省存储空间。

阅读更多:Numpy 教程

numpy.zeros函数的作用

numpy.zeros函数是用来创建一个指定大小或形状的全0数组的函数。其函数原型为:

numpy.zeros(shape, dtype=float, order='C')
Python

其中,shape参数是用来指定输出数组的形状的。可以是整数或整数元组,例如:

np.zeros((2,3))
Python

则生成一个2*3的数组。

dtype参数用来指定数组的数值类型。默认是float,也可以是int等其他类型。

order参数用来指定数组在内存中的存放顺序,’C’代表按行顺序存储,’F’则代表按列顺序存储。

numpy.zeros节省存储空间的原因

当我们使用numpy.zeros创建全0数组时,实际上numpy并不会在内存中真正地创建全0的数组,而是采用了一种类似指针的方式,指向某个内存地址的方式实现的,这个内存地址的内容被清空(即设置为0)。这意味着我们并没有在内存中创建一个值全为0的数组,而只是在内存中开辟了一块空间,它的值全为0,占据的存储空间非常小。

实际上,通常情况下创建一个数组需要先分配内存,而分配内存是需要时间和空间的,特别是对于大规模的数据来说,这显然是非常消耗时间和空间的操作。而采用类似指针的方式,可以快速地分配内存和清空内存。

举个例子,如果要创建一个10万行*100列的数组,如果采用传统的方式来创建,要占据非常大的内存空间,而使用numpy.zeros则只需要极小的内存空间。

import numpy as np
import sys

# 传统方式创建数组
a = [[0]*100 for _ in range(100000)]
print(sys.getsizeof(a))   # 输出结果:8000048

# numpy.zeros方式创建数组
b = np.zeros((100000,100))
print(sys.getsizeof(b))   # 输出结果:800096
Python

我们可以看到,通过传统方式创建的数组所占据的内存空间要远远大于使用numpy.zeros方式创建数组所占据的空间。

numpy.zeros和其他创建数组的方法对比

numpy提供了许多创建数组的方法,下面我们分别以numpy.zeros、numpy.empty和numpy.ones为例,对这三种方法进行比较。

numpy.zeros和numpy.empty的区别

numpy.zeros和numpy.empty都是用来创建数组的函数,不同的是numpy.zeros会在创建数组时把值清为0,而numpy.empty不会。

numpy.empty只会开辟一块未经初始化的内存空间,其元素的具体值是未知的,通常它们会是由该内存地址处原先存在的值。在使用numpy.empty函数时,需要手动将所有元素设置为0或其他需要的值。

我们可以通过下面的代码来对比两者的结果:

a = np.zeros(5)
b = np.empty(5)

print(a)    # 输出结果:[0. 0. 0. 0. 0.]
print(b)    # 输出结果:[0. 0. 0. 0. 0.]
Python

我们可以看到,两个数组的结果都是0,但是实际上numpy.empty函数并不保证数组元素一定是0,所以需要用户自行对其进行初始化。

numpy.zeros和numpy.ones的区别

numpy.zeros和numpy.ones都是用来创建全0或全1数组的函数,不同的是前者创建的数组中所有元素都是0,而后者创建的数组中所有元素都是1。

下面我们可以简单对比一下numpy.zeros和numpy.ones的代码:

a = np.zeros(5)
b = np.ones(5)

print(a)    # 输出结果:[0. 0. 0. 0. 0.]
print(b)    # 输出结果:[1. 1. 1. 1. 1.]
Python

我们可以看到,numpy.zeros和numpy.ones在创建数组时都是非常便捷的函数,它们可以在申请较小的内存空间的同时快速生成所需要的数组,而且操作简单、易于使用。

总结

numpy.zeros函数是一个用来创建全0数组的便捷函数,它可以快速地生成所需要的数组,而且可以极大地节省存储空间。通过这篇文章,我们了解了numpy.zeros函数的使用方法和原理,以及和其他创建数组的函数的比较,相信大家对numpy这一强大的科学计算库有了更深入的理解。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册