Python / Numpy 数组创建方法

Numpy 数组创建方法

在数组的属性和方法这一小节中我们学习到了如何查看数组的大小、维数(秩)、元素的数据类型、每个元素的大小等等。这一小节将详述如何从数值范围创建特殊数组,比如指定间隔的等差数列型数组、等比数列型数组等。

1. 创建等间隔序列数组

通常定义一个等间隔序列数组(即等差数组),需要指定某些具体要素,例如起始值、终止值、步长、样本数量等。主要功能类似于 Python 内置的 range 函数,但是返回的是一个 ndarray。

1.1 numpy.arange 函数

arange 函数可以通过指定起始值、终止值、步长的方式,来创建一个我们需要的数组。其函数调用方法如下:

numpy.arange(start, stop, step=1, dtype=None)

构造函数接受的参数详解如下:

参数 描述
start 待创建数组序列的起始值,默认为0
stop 终止值。和range类似,创建的序列结果不包含终止值。
step 步长,默认为1
dtype 返回ndarray的数据类型,如果没有提供,则自动根据输入参数的类型进行推测

案例

创建一个长度为 10 的一维整数类型的数组。

np.arange(0,100,10, dtype=np.int32)
Out: 
    array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

可以看到数组并不包含终止值,是 [start, stop) 的区间。

在某些情况下,可以结合 reshape 函数使用,生成具有等差数列特性的数组矩阵:

np.arange(0,100,5, dtype=np.float16).reshape(4,5)
Out: 
    array([[ 0.,  5., 10., 15., 20.],
           [25., 30., 35., 40., 45.],
           [50., 55., 60., 65., 70.],
           [75., 80., 85., 90., 95.]], dtype=float16)

1.2 numpy.linspace 函数

linspace 函数的功能是生成在某一确定区间内的一维数组,但是功能相较于 arange 更加强大。其函数调用方法如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

构造函数接受的参数详解如下:

参数 描述
start 待创建数组序列的起始值,默认为0
stop 终止值,如果endpoint为True,该值包含于数列中
num 要生成的等步长的样本数量,默认为50
endpoint 该值为 True时,数列中中包含stop值,反之不包含,默认是True。
retstep 若为 True ,函数会同时返回步长
dtype 返回ndarray的数据类型,如果没有提供,则自动根据输入参数的类型进行推测

案例

创建一个长度为 10 的一维整数类型的数组。

np.linspace(0, 10, endpoint=False, num=10, dtype=np.int32)
Out: 
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

观察发现:endpoint 设置为 False,生成的数组不包含终止值 10。

当然,想达到同样的效果,还可以这样写:

np.linspace(0, 9, endpoint=True, num=10, dtype=np.int32)
Out: 
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

当指定 retstep 为 True 时,linspace 函数会返回一个由数组和步长组成的、长度为2的元祖:

np.linspace(0, 9, endpoint=True, num=10, retstep=True, dtype=np.int32)
Out: 
    (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 1.0)

2. 创建等比序列数组

类似的,创建等比序列数组的过程,也是由起始值、终止值、样本数量等元素统一定义的,但是在使用具体函数的时候,有些许不同。

2.1 numpy.logspace 函数

logspace 函数是通过指定基数、基数的起始指数、基数的终止指数、样本数量等元素,来定义一个等比数列。其函数调用方法如下:

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

构造函数接受的参数详解如下:

参数 描述
start 数列的起始值,表示以base为底的幂的指数
stop 数列的终止值,表示以base为底的幂的指数;如果endpoint为True,幂包含于数列中
num 要生成的样本数量,默认为50
endpoint 该值为 True时,数列中中包含stop值,反之不包含,默认是True
base 基数
dtype 返回ndarray的数据类型,如果没有提供,则自动根据输入参数的类型进行推测

案例

当定义指定公比的等比数列时,logspace 函数非常方便。例如,定义一个2(2的1次方)、4(2的2次方)、……、1024(2的10次方),长度为10的一维等比数组:

np.logspace(1, 10, num=10, endpoint=True, base=2, dtype=np.int32)
Out: 
    array([   2,    4,    8,   16,   32,   64,  128,  256,  512, 1024])

通过对该案例的研究,可以看出:

通过 logspace 创建的等比数列,起始值是以 base=2 为底、start=1 为指数的幂,终止值是以 base=2 为底、stop=10 为指数的幂,并指定样本数量生成的。生成的等比数列的指数满足等差数列分布的形式,因此logspace 函数产生的数列又称为对数等差数列。

2.2 numpy.geomspace函数

geomspace 通过指定起始值、终止值、样本数量,来返回相对应的等比数组。

和 logspace 最大的不同在于,geomspace 并不需要事先指定 base(基数),其函数调用方法如下:

numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None)

构造函数接受的参数详解如下:

参数 描述
start 待创建数组序列的起始值
stop 终止值,如果endpoint为True,该值包含于数列中
num 要生成的样本数量,默认为50
endpoint 该值为 True时,数列中中包含stop值,反之不包含,默认是True。
dtype 返回ndarray的数据类型,如果没有提供,则自动根据输入参数的类型进行推测

案例

同样的,生成 1-1024 长度为 10 的等比数列,可以有如下语句:

np.geomspace(2, 1024, 10, endpoint=True, dtype=np.int32)
Out: 
    array([   2,    4,    7,   16,   32,   64,  127,  256,  512, 1024])

geomspace 函数的语法相对简单,只需要指定起始值、终止值、样本数量,即可确定一个等比数列。

3. 小结

本节主要介绍了等差和等比数组的创建方法,和 Python 内置的 range 函数不同的是,在 numpy 中,你可以灵活地指定 endpoint 参数来决定终止值是否包含在数列区间内。特别的,创建的一维数组可以非常方便的用 reshape 方法,转化成多维矩阵。