最高效简明的numpy教程

1、为什么要有numpy
在各种数据科学任务中,声音、文本、图像等数据都需要转换为数值型数据特别是数组形式进行处理。因此,如何有效存储操作数值型数组是绝对的基础过程。
numpy和python内置的列表类型十分相似,但是随着数组维度上变大,numpy内部提供了更加高效的存储和数据操作,numpy几乎是数据科学生态的核心。
2、理解python的数据类型
python的一大优点是易用性,静态类型的语言如C每个变量都需要声明,动态的python可以跳过这个规定。这也说明了python变量不仅代表了值,还有一些额外信息。
例如我们定义x=100,在C语言中,他就是一个数据类型字节的内存存储了一个数字,在python中,其实是一个结构体,里面不仅包含值,还有引用计数、类型编码等信息。
如果定义一个list=[tuu,‘2’,3,3.4],其中每个元素的类型可以不一样,每个元素都有自己的结构体信息,虽然灵活,但是存储操作开销非常大,numpy存储固定类型的数组,只需要记录一次类型信息就够了。

3、numpy的重要操作
numpy的操作很多,我介绍一些后面常用的:
3.1二维数组切片操作
假设array([1,2,3,4],
[5,6,7,8],
[9,10,11,12])
如果我们需要指定1,2行和3,4列的数据,可以这样写x2[1:2,3:4],
x2[1:2,1:4:2] 这代表了列每个一列取一次。

3.2数组变形
简单的一种是reshape函数,但是它前后元素个数必须相等;还有一种常用的是newaxis,将一维数组变形成二维矩阵;
x=np.array[1,2,3])
x.reshape(1,3),转变成1行3列的矩阵 x=([[1,2,3]])
或者用x[np.newaxis,:] x=([[1,2,3]])
x.reshape(3,1),转变成3行1列的矩阵 x=([[1],[2],[3]])
或者用x[:,np.newaxis]

3.3数组的计算
python对于数组的循环计算很缓慢,因为每次要确认数据类型和调用的函数类型等信息,numpy提供了高效的计算的通用函数,主要通过向量化操作来进行;
另一种向量化方法是广播,他可以使不同维度的数组可以进行计算,广播规则不细说了,举个例子:数据归一化
X是一个10行3列的数组,我们取每一列的平均值,Xmean=X.mean(0),假设为([1,2,3])
然后X-Xmean,得到的数据再取平均值,发现每个值几乎都接近0。说明Xmean被广播成10行3列的数组。

3.4数组的排序
np.sort()函数
np.argsort()返回排好序的原始索引值,
np.partition()最左边返回第K小的值,其余的任意排列
axis可以指定沿着行或者列排序。

结构化数组也可以用pandas的dataframe实现,这里就先不说了。
numpy知识点很多,不需要都记住,有个印象,需要用的时候再查一下具体如何使用。

猜你喜欢

转载自blog.csdn.net/weixin_53344209/article/details/114237806