什么是ndarray?
ndarray是Numpy的核心数据结构,一个ndarray对象代表了一个n维数组,是一系列同类型数据的集合。
ndarray可以理解为能够进行更复杂运算的list。
实际上,ndarray是对数学中张量 (通俗理解张量, 戳这里)这一概念的逻辑表达,通俗地讲,1维的张量就是向量,2维的张量就是矩阵。除了负责存储数据之外,ndarray还提供了许多向量、矩阵的运算,例如点乘、转置、求均值等等。
一个典型的ndarray结构如下图所示:
可以看到,ndarray由两个部分组成:
- header:信息头,存放了指向数据区块的指针,数据类型的描述,以及数组的维度信息等
- data:数据块,一系列相同大小的内存块,存放的就是实际的数据值
ndarray的构造
np.array(data)
方法用于从现有数据构造ndarray,data可以是手动输入的数据、列表、ndarray
>>> import numpy as np
>>> a=np.array([1,2,3,4])#可以直接输入数据
>>> print(a)
[1 2 3 4]
>>>data=range(1,10)
>>> b=np.array(data)#也可以基于list构造ndarray
>>> print(b)
[1 2 3 4 5 6 7 8 9]
>>> c=np.array(b) #当然,从现有的ndarray构造也可以
>>> print(c)
[1 2 3 4 5 6 7 8 9]
Numpy也提供了一些方法用于创建特殊的矩阵:
一般情况下,它们的调用方式为np.xxx(shape)
,其中,shape是一个元组,表示将要创建的ndarray的形状。例如,np.empty((5,3))
就表示创建一个5行3列的空矩阵。
>>> import numpy as np
#创建一个空的二维ndarray
>>> a=np.empty((5,3))
>>> print(a)#注意这里的数据并非真正意义上的空值,解释器仍会将其初始化
[[6.23042070e-307 1.89146896e-307 1.37961302e-306]
[1.05699242e-307 8.01097889e-307 1.78020169e-306]
[7.56601165e-307 1.02359984e-306 1.33510679e-306]
[2.22522597e-306 1.78019761e-306 1.78019761e-306]
[1.20160711e-306 2.56765117e-312 0.00000000e+000]]
#创建一个三维全1数组
>>> b=np.ones((2,3,5))
>>> print(b)
[[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]]
#创建一个全0向量
>>> c=np.zeros((10))
>>> print(c)#如果在shape中只传入一个参数,那么默认是行向量的长度
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
#创建一个对角矩阵
>>> d=np.eye(5)
>>> print(d)
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
总结
方法名 | 功能 |
---|---|
array(data) | 从现有数据创建ndarray |
empty(shape) | 创建空数组 |
ones(shape) | 创建全1数组 |
zeros(shape) | 创建全0数组 |
eye(shape) | 创建对角矩阵 |