python学习之 numPy包


numPy包:(科学计算) import numpy as np

NumPy(Numeric Python)是高性能科学计算和数据分析的基础包。

  NumPy模块提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库等。

  1)、ndarray,一个具有矢量运算和复杂广播能力的快速且节省空间的多维数组

  2)、用于对整组数据进行快速运算的标准数学函数(无需编写循环)

  3)、用于读写磁盘数据的工具以及用于操作内存映射文件的工具

       4)、实用的线性代数、傅里叶变换和随机数生成函数。

  5)、用于集成由C/C++和Fortran代码的工具包

       6)、比较成熟的(广播)函数库;


data.shape  (表示各维度大小的元组)   data.dtype  (用于表明数组数据类型的对象)

data.ndim     (行纬度的大小)

zeros和ones分别可以创建指定长度或形状的全0或全1数组;np.zero(10)  np.zeros((3,6)) 

zeros_like和ones_like 以另一个数组为参数,并根据其形状和dtype创建一个全0或1数组

empty可以创建一个没有任何具体值的数组(多数情况下是一些未初始化的垃圾值,而非全0),也有相似的empty_like函数;  np.empty((2,3,2))

np.arange(15)    生成0-14的数组(是Python内置函数range的数组版),返回的是一个ndarray而不是列表

eye、identity 创建一个正方的N*N单位矩阵(对角线为1,其余为0)  np.identity(n, dtype=None) 、np.eye(N, M=None, k=0, dtype=<type ‘float’>);

np.identity只能创建方形矩阵。np.eye可以创建矩形矩阵,且k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,2偏离2,以此类推,-1向下偏离。值绝对值过大就偏离出去了,整个矩阵就全是0了。

data.astype(np.int32)  将data的数据类型转化为int32, 如果将浮点数转换成整数,则小数部分将会被截断;如果字符串数组表示的全是数字,也可用此将其转化为数值形式

data.astype(array.dtype) 将data的数据类型转换为与array一样的数据类型

注意:调用astype无论如何都会创建一个新的数组(原始数据的一份拷贝),即使新dtype和老dtype相同也是如此


基本的索引

arr=array([0,1,2,3,4,5,6,7,8,9])   =》   arr[5:8]=array([5,6,7])     前有后无

arr3d=array([[[1,2,3],

                       [4,5,6]],               =》  arr3d[1,0] = array([7,8,9])

                      [[7,8,9],

                       [10,11,12]] ])    

=》  arr3d[1,0] = array([7,8,9])

切片

arr2d=array([[1,2,3],

                     [4,5,6],                     =》   arr2d[:2] = array([1,2,3],[4,5,6]])

                     [7,8,9] ])                  =》    arr2d[:2,1:]=array([[2,3],[5,6]])

                                                    =》     arr2d[1,:2]=array([4,5])


布尔型索引和赋值

布尔型数组的长度必须跟索引的轴长度一致!

若想得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如:arr[5:8].copy()

花式索引

arr=array([[ 0,0,0,0],

                 [ 1,1,1,1],                       =》arr[ [4,3,0,6] ] =array([[ 4,4,4,4],

                 [ 2,2,2,2],                                                                [ 3,3,3,3],

                 [ 3,3,3,3],                                                                [ 0,0,0,0],

                 [4,4,4,4],                                                                 [ 6,6,6,6]  ])

                 [ 5,5,5,5],                     =》arr[ [-3,-5,-7] ]=array([[ 5,5,5,5],

                 [ 6,6,6,6],                                                             [ 3,3,3,3],

                 [ 7,7,7,7] ])                                                           [ 1,1,1,1] ])

arr=array[[0,1,2,3],                

               [4,5,6,7],                       =》arr[  [1,5,7,2],[0,3,1,2]  ]  =  array ( [ 4,23,29,10 ] )

               [8,9,10,11],                   =》 arr[ [1,5,7,2] ] [:,[ 0,3,1,2]]  

               [12,13,14,15],                            = array( [ [ 4,7,5,6],

               [16,17,18,19],                                           [20,23,21,22],

               [20,21,22,23],                                           [28,31,29,30],

               [24,25,26,27],                                           [8,11,9,10 ] ])

               [28,29,30,31]  ])

花式索引跟切片不一样,它总是将数据复制到新数组中


数组转置 arr.T  ,还有transpose(对于高维数组,其需要得到一个由轴编号组成的元组才能对这些轴进行转置)


通用函数:快速的元素级数组函数

np.sqrt(arr)   np.exp(arr)     np.maxinum(x,y) #x与y元素级的最大值





利用数组进行数据处理

np.where(cond,xarr,yarr)     =      [( x if c else y ) for x,y,c in zip(xarr,yarr,cond )]

还可嵌套成更复杂的形式


数据和统计方法

sum、mean以及标准差std等聚合计算既可以当作数组的实例方法调用,也可以当作顶级NumPy函数使用:

mean和sum这类的函数可以接受一个axis参数(用于计算该轴向上的统计值),最终结果是一个少一维的数组

comsum和cumprod之类的方法则不聚合,而是产生一个由中间结果组成的数组

argmin、argmax分别为最大和最小元素的索引


用于布尔型数组的方法

sum可用来对布尔型数组中的true计数:(arr>0).sum() #正值的数量

arr.any()   arr.all()   any用于测试数组中是否存在一个或多个true,而all则检查数组中所有值是否都是true


排序

arr.sort()  升序排序,多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort即可

顶级方法np.sort返回的是数组的已排序的副本,而就地排序则会修改数组本身。计算数组分位数最简单的办法就是对其进行排序,然后选取特定位置的值


唯一化以及其他的集合逻辑

np.unique(data)  用于找出数组中的唯一值并返回已排序的结果   = sorted(set(data))  (纯python代码)

np.in1d(data,array)  用于测试array数组中的值是否存在于data数组中,返回一个布尔型数组


用于数组的文件输入输出:numPy能够读写磁盘上的文本数据或二进制数据

将数组以二进制格式保存到磁盘

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。若文件路径末尾没有扩展名.npy,则该扩展名会被自动加上。

通过np.savez可以将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可

存取文本文件

np.loadtxt(' array_ex.txt ', delimiter=',' ) 加载txt文件,以逗号为分割

np.savetxt  将数组写到以某种分隔符隔开的文本中


线性代数

矩阵乘法x.dot(y) 或者np.dot(x,y)

from numpy.linalg import inv,qr这样


随机数生成

numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值