Numpy数组创建方式详解
在进行数学运算之前我们首先要创建数组,数组就是数的集合,其中的数按照一定的规则排序。比较常见的是二维数组,二维数组包含了行和列。
Numpy 中创建数组的方式主要有以下两种。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
Numpy 中创建数组的方式主要有以下两种。
- 创建元素为 0 或 1 的数组。
- 将已有的数据转换为数组,比如将列表转换为数组。
1. 创建元素为0或1的数组
Numpy 提供了一些方法让我们创建元素全为 1 和 0,或者任意指定的数的数组。其中,empty 方法生成的元素是随机数。In [1]: import numpy as np
1) empty()
empty 方法中传入 shape 参数来指定生成数组的形状,这里我们传入 (3,3) 用来生成一个 3 行 3 列的数组。In [2]: np.empty(shape=(3,3)) # 创建一个3行3列的数组 Out[2]: array([[3.45845952e-323, 0.00000000e+000, 0.00000000e+000], [0.00000000e+000, 0.00000000e+000, 6.54142915e-321], [4.83245800e+276, 1.69600404e+161, 1.27849494e-152]])
2) eye()
eye 方法可以用来创建一个对角线元素全为 1 的数组,我们可以传入参数3来生成一个 3 行 3 列、对角线元素全为 1、其他元素全为 0 的数组。In [3]: np.eye(3) # 创建对角线元素全为1的二维数组 Out[3]: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
3) identity()
identity 方法用来创建单位矩阵,我们可以传入参数 3 来生成一个 3 行 3 列的单位矩阵。In [4]: np.identity(3) # 创建单位矩阵 Out[4]: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
4) ones()
ones 方法可以用来生成元素全部为1的数组,参数 shape 用来指定生成数组的形状,比如要生成一个 2 行 4 列的数组,我们就需要传入 (2,4) 作为参数。In [5]: np.ones(shape=(2,4)) # 创建元素全为1的数组 Out[5]: array([[1., 1., 1., 1.], [1., 1., 1., 1.]])
5) zeros()
同样地,还可以生成元素全部为0的数组,这里可以使用 zeros 方法,同样使用 shape 参数指定数组的形状。In [6]: np.zeros(shape=(4,2)) # 创建元素全为0的数组 Out[6]: array([[0., 0.], [0., 0.], [0., 0.], [0., 0.]])
6) full()
full 方法是一个通用的方法。与 ones 方法和 zeros 方法不同的是,ones 方法是生成全部为 1 的数组,zeros 方法是生成全部为 0 的数组,而 full 方法则可以通过指定参数 fill_value 来生成指定元素的数组,比如生成一个元素全部为 2 的 3 行 3 列的数组。In [7]: np.full(shape=(3,3),fill_value=2) # 创建元素全为fill_value的3行3列的数组 Out[7]: array([[2, 2, 2], [2, 2, 2],
2. 将列表转换为数组
有些时候,我们得到的数据并不是 Numpy 中数组的形式,此时可以通过 Numpy 中的 array 方法将其他形式的数据转换为 Numpy 中数组的形式,比如可以将 Python 中内置的 list 列表结构转换为数组。示例代码如下。In [1]: import numpy as np
将列表 [1,2,3 ]转换为数组的形式。In [2]: np.array([1,2,3]) # 创建一维数组 Out[2]: array([1, 2, 3])将嵌套列表转换为二维数组。
In [3]: np.array([[1,2,3], ...: [4,5,6] ...: ]) # 创建二维数组 Out[3]: array([[1, 2, 3], [4, 5, 6]])
3. 生成一串数字
有些时候,我们需要生成一些连续的数字,Numpy 提供了相应的方法。注意这里我们称“生成一串数字”,而不是“生成一维数组”,因为生成的结果并没有维度的信息。In [1]: import numpy as np
1) arange()
arange 方法类似于 Python 中自带的 range 函数。参数 start 用来指定起始的值,参数 stop 用来指定结束的值,而参数 step 则用来指定步长,比如我们想要生成一个起始值为 1,终止值为 10,步长为 2 数组。In [2]: np.arange(start=1,stop=10,step=2) # 起始值为1,终止值为10,步长为2 Out[2]: array([1, 3, 5, 7, 9])
2) linspace()
linspace 方法也用来生成一个序列,与 arange 方法不同的是,它没有设置步长,而是设置了一个数。参 数 start 用来设置起始的值,参数 stop 用来设置结束的值,参数 num 用来设置一共生成多少个数。比如我们想要生成一个起始值为 1,终止值为 10,总共 5 个数的数组In [3]: np.linspace(start=1,stop=10,num=5) # 起始值为1,终止值为10,总共5个数 Out[3]: array([ 1. , 3.25, 5.5 , 7.75, 10. ])
3) logspace()
logspace 方法类似于 linspace,不过是以 log 为刻度。In [4]: np.logspace(start=1,stop=10,num=5) # 类似于linspace,但是以log为刻度 Out[4]: array([1.00000000e+01, 1.77827941e+03, 3.16227766e+05, 5.62341325e+07, 1.00000000e+10])
4. 创建特殊数组
我们还可以生成一些特殊的数组,比如根据对角线元素生成数组,或者提取数组的对角线元素等。In [1]: import numpy as np
1) 对角矩阵数组
diag 方法用来生成对角矩阵。diag方法传入的参数是列表,这个列表是生成数组的对角线元素,其他位置的元素全部为0。In [2]: np.diag([1,2,3,4]) # 生成对角矩阵 Out[2]: array([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]])diag 方法还可以将数组作为参数传入,这个时候 diag 方法的作用就是提取数组的对角线元素。
In [3]: np.diag([[1,2,3], ...: [4,5,6], ...: [7,8,9]]) # 提取对角线元素 Out[3]: array([1, 5, 9])
2) 三角矩阵数组
tri 方法可以用来生成三角矩阵。第 1 个参数是生成数组的行数,第 2 个参数是生成数组的列数,默认生成下三角矩阵。In [4]: np.tri(3,5) # 生成三角矩阵 Out[4]: array([[1., 0., 0., 0., 0.], [1., 1., 0., 0., 0.], [1., 1., 1., 0., 0.]])tril 方法是根据已知的矩阵生成一个三角矩阵。第 1 个参数是一个数组,第 2 个参数是下三角矩阵的相对位置,-1 表示向下移动一个步长。
In [5]: np.tril([[1,2,3], ...: [4,5,6], ...: [7,8,9]],-1)#降位三角矩阵 Out[5]: array([[0, 0, 0], [4, 0, 0], [7, 8, 0]])triu 方法和 tril 方法是相对的,它是用来生成上三角矩阵的。
In [6]: np.triu([[1,2,3], ...: [4,5,6], ...: [7,8,9]],-1)#升位三角矩阵 Out[6]: array([[1, 2, 3], [4, 5, 6], [0, 8, 9]])
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。