NumPy 创建数组
Jinku Hu
2023年1月30日
0 元素矩阵
np.zeros
np.zeros
可以用来创建以 0 为元素的矩阵,它的语法如下,
np.zeros(shape, dtype=float, order="C")
其中 shape
就是所要生成的矩阵的尺寸,可以为一维,二维和多维。数据类型默认为 float64
,当然你可以指定具体的其他数据类型。
我们来创建几个零元素矩阵
>>> import numpy as np
>>> np.zeros(5) # 生成一个元素为 5 个 0 的一维矩阵
array([0., 0., 0., 0., 0.])
>>> np.zeros(5, dtype='int8') #生成一个元素为 5 个 0 的一维矩阵,数据类型为 int8
array([0, 0, 0, 0, 0], dtype=int8)
>>> np.zeros((4, 3)) # 生成一个 4 行 3 列的零矩阵
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
np.empty
有些情况下,你只是想初始化一个矩阵为指定尺寸的矩阵,对里面的初始化数据并不关心,那你可以使用 np.empty
来实现更快的初始化,但要注意的一点时,它并不保证里面的数据为 0。
我们可以通过%timeit
来具体比较下 np.empty()
和 np.zeros()
的执行时间,
In[1]: % timeit np.empty((100, 100))
715 ns ± 11.6 ns per loop(mean ± std. dev. of 7 runs, 1000000 loops each)
In[2]: % timeit np.zeros((100, 100))
4.03 µs ± 104 ns per loop(mean ± std. dev. of 7 runs, 100000 loops each)
很明显的,np.empty()
在初始化的时候要比 np.zeros()
快得多,在矩阵尺寸为 (100, 100)
的测试条件下,它只需要大约 17.5%
的时间。
np.zeros_like
假如有些情况下,我们已经有一个矩阵,我们想生成一个跟它具有相同尺寸的零矩阵,我们可以用传统的方法来创建,
test = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.zeros(test.shape)
或者我们可以用 NumPy 的另外一个函数 np.zeros_like()
直接来生成,效率更高。
x = np.zeros_like(test)
注意
np.zeros_like()
的形状跟输入矩阵一样,而且数据类型也是一样的。1 元素矩阵
np.ones
同理,我们也可以快速生成元素全为 1
的矩阵,np.ones()
的用法和输入参数跟 np.zeros()
的完全一致。
>>> import numpy as np
>>> np.ones(5) # 生成一个元素为 5 个 1 的一维矩阵
array([1., 1., 1., 1., 1.])
>>> np.ones(5, dtype='int8') #生成一个元素为 5 个 1 的一维矩阵,数据类型为 int8
array([1, 1, 1, 1, 1], dtype=int8)
>>> np.ones((4, 3)) # 生成一个 4 行 3 列的元素为 1 的矩阵
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
np.ones_like
跟 np.zeros_like
一样,np.ones_like
可以用来更高效的生成与输入矩阵具有相同形状的元素为 1 的矩阵。
>>> test = np.array([[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]])
>>> np.ones_like(test)
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
对角矩阵
对角矩阵是对角线上元素为 1
,其他位置元素为 0
的矩阵。可以通过 np.eye()
函数来生成此类型矩阵,它的语法如下
np.eye(N, M=None, k=0, dtype= < class 'float' >, order='C')
其中,
参数名称 | 数据类型 | 摘要 |
---|---|---|
N |
INT | 指定生成的矩阵的行数 |
M |
INT | (可选)缺省值为 None 。指定要生成的矩阵的列数。当它为 None 时,它变为与 N 相同的值 |
k |
INT | (可选)缺省值为 0。0 为主对角线位置,如果 k 的值为正,则 1 元素向上平移 k 次,如果 k 为负,则 1 元素向下平移 k 次, |
dtype |
数据类型 | (可选)缺省值为 float 指定生成的数组的元素的数据类型 |
np.eye()
举例
>>> import numpy as np
>>> np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> np.eye(4, 3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.],
[0., 0., 0.]])
>>> np.eye(3, 4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])
>>> np.eye(4, k=1)
array([[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.],
[0., 0., 0., 0.]])
np.identity()
np.identity
可以被看成是一种特殊的 np.eye
,它用来生成的矩阵是一个方阵,也就是行列数相等的矩阵。语法如下,
numpy.identity(n, dtype = float)
参数名称 | 数据类型 | 说明 |
---|---|---|
n |
INT | 指定要生成的矩阵的大小。生成 N×N 方阵 |
dtype |
数据类型 | (可选)缺省值为 float。指定元素的数据类型 |
np.identity()
举例
>>> import numpy as np
>>> np.identity(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
三角矩阵
可以通过 np.tri()
来生成三角矩阵,函数调用语法如下,
numpy.tri(N, M=None, k=0, dtype= < class 'float' >)
其输入参数跟 np.eye()
类似,可以作为参考。
np.tri()
举例
>>> import numpy as np
>>> np.tri(3)
array([[1., 0., 0.],
[1., 1., 0.],
[1., 1., 1.]])
>>> np.tri(4, k=1)
array([[1., 1., 0., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])