Numpy提供了高效存储和操作密集数据缓存的接口。
先不管那些数据是如何处理的,我们只需要明白,数据是如何存储的,就够了。而知道数据如何存储,那么其相应的操作也变得非常明了。
PS:除要点外,都是解释说明要点的,理解要点是核心,知道要点,在不看任何东西的前提条件下,能说出这个要点所包含的意义
核心:理解Python语言中,数据是如何被存储和操作的。
第一点、
Python中的所有变量都是对象。
一个特性:Python中,“任何变量”可以赋“任何值”。
这是因为Python中的每一个数据都包含了除本数据以外的头。定义如下
struct _longobject{
long ob_refcnt;//引用计数,Python默默处理内存的分配和回收
PyTypeObject *ob_type;//将变量的类型编码
size_t ob_size;//指定接下来的数据成员的大小
long ob_digit[1];//包含我们希望Python变量表示的实际整型值
};
第二点、
Python中的列表,基于第一点,也是灵活的。
这造成了巨大的空间浪费,所以为了像C语言一样,快速操作,Numpy提供相应的库。
第三点、
Python为解决这个问题,采用了array
array是一个包
array.array(列表或数据)
如:array.array(a,[b,c,d,e]) a为类型数据码
array形式:类型数据码 + 列表(同一数据)
第四点、
Numpy提供了类似于array的方法,更为简洁,好用。
与array使用方法基本一致,但是可以使用许多方法。
第五点
Numpy中array提供的矩阵是array中列表中的列表。
即array()形式,内部[]表示矩阵单个[]表示一行,即有三层形式。
array([
[1,2,3]
[1,2,3]
])
方法
刚才讲述了原理,一定要搞清楚再思考方法的问题。因为方法是为原理服务的。
方法 | 效果 |
---|---|
np.ones((row, column), dtype=?) | 获得1的row*column矩阵 |
np.zeros((row, column)) | 获得0的row*column矩阵 |
np.full((row, column), 数) | 获得'数'的row*column矩阵 |
np.linspace(0,1,5) | 数组,0-1,五个数均匀分配(含0含1) |
np.random.random((row, column)) | 获得"random"的row*column矩阵 |
np.random.normal(0,1,(row, column)) | 获得"u 与 标准差"的row*column矩阵 |
np.random, randint(0,10,(3,4)) | 获得[0,10)区间随机整型row*column数组 |
np.eye(3) | 获得单位矩阵(n*n) |
np.empty(3) | 获得未初始化矩阵n*n |