数据处理三剑客之Numpy

ndarray和list列表的区别:
python list 列表保存的是对象的指针,比如 [0,1,2] 需要保存 3 个指针和 3 个整数的对象,浪费内存资源和cpu计算时间

Numpy中的ndarray是一种保存单一数据类型的多维数组结构,储存在一个连续的内存块中,节约了计算资源。


numpy:
-NumPy(Numerical Python):Python语言的一个扩展程序库,支持大量的维度数据与矩阵运算,针对数组提供大量的数学函数库。

-numpy是基于c语言开发,所以这使得numpy的运行速度很快,高效率运行就是numpy的一大优势。


创建数组:
t1 = np.array([0,1,2,3])
t2 = np.array(range(4))
t3 = np.arange(4)

#np.arange([start,] stop[,step,], dtype=None)
#dtype为数据类型

#改变数据类型
t4 = np.array(range(4), dtype=‘float32’)

#numpy中的小数
t5 = np.array([random,random() for i in range(4)])

#保留两位小数
t6 = np.round(t5, 2)


numpy中的轴(axis)
可以理解为方向,用0,1,2…表示
np.reshape(2,3,4)
其中2为0轴,3为1轴,4为2轴


numpy读取数据:
np.loadtxt(frame, dtype=np.float, delimiter=None.skiprows=0, unpack=False)
name: 文件的名称, 可以是文件名, 也可以是ugz或者bz2的压缩文件;
dtype: 数据类型,可选,默认是float;
delimiter: 分隔符字符串,默认情况是任何的空格,
skiprows: 跳过前xx行, 一般情况跳过第一行;
usecols: 读取指定的列,索引,可以是元组;
unpack: 如果为True,对返回的数组对象转置;

使输出不为科学计数法
np.set_printoptions(suppress=True)


数组的转置
t1.transpose()
t1.T
t1.swapaxes(1,0) #将0轴和1轴转置


numpy中的索引和切片:
#取行
t1[2]

#取连续的多行
t1[2:]

#取不连续的多行
t1[[1,3,5]]

#取列
t1[:,0]

#取连续的多列
t1[:,2:]

#取不连读的多列
t1[:,[0,2]]

#取第3行到第5行,第2列到第4列
t1[2:5,1:4]

#取多个不相邻的点
t1[[0,2,2],[0,1,3]]
得到(0,0),(2,1),(2,3)


numpy中三元运算符、布尔索引、裁剪

1、np.where(t1<3,10,20)
#t1中小于3的变为10,大于3的变为20

2、t[t>10]=10

3、t1.clip(10,18)
#t1中小于10变为10,大于18变为18

t1[3,3] = 2
把位置3,3值变2


数组的拼接
np.vstack((t1,t2)):竖直拼接
np.hstack((t1,t2)):水平拼接

行变换
t[[2,1],:] = t[[1,2]:]

列变换
t[:,[2,1]] =t[:,[1,2]]


numpy的一些好用方法:
1.获取最大值最小值的位置
-np.argmax(t,axis=0)
-np.agmin(t,axis=0)

2.创建一个全0的数组:np.zeros((3,4))
3.创建一个全1的数组:np.ones((3,4))
4.创建一个对角线为1的正方形数组(方阵):np.eye(3)


numpy生成随机数
1、numpy.random.rand(d0, d1, …, dn)
-产生一个给定形状的数组(其实应该是ndarray对象或者是一个单值),数组中的值服从[0, 1)之间的均匀分布。

2、numpy.random.randn(d0, d1, …, dn)
-返回一个指定形状的数组,数组中的值服从标准正态分布(均值为0,方差为1)

3、numpy.random.randint(low, high, [shape])
-从给定上下限范围选取随机数整数,范围是low,high,shape指定形状

4、numpy.random.uniform(low, high, size)
-返回一个在区间[low, high)中均匀分布的数组,size指定形状。

5、numpy.random.normal(loc, scale, size)
-从指定正态分布中随机抽取样本,分布中心是loc(概率分布的均值),标准差是scale,形状是size

6、np.random.seed(s)
-随机数种子,s是给定的种子值,因为计算机生成的是伪随机数,所以通过设定相同的随机数种子,可以每次生成相同的随机数


numpy的copy和view
1、a=b 完全不复制,a和b相互影响
2、a=b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的
3、a=b.copy(),复制,a和b互不影响

1,2属于浅拷贝
3属于深拷贝
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用

浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,


numpy中的nan和inf
nan:not a number
1、nan不等于nan
2、使用np.count_nonzero(t!=t)可得到nan的个数
3、使用np.isnan(t)可以判断是否nan
4、nan和任何值计算都为nan

np.sum(t,axis=0) 计算每一列的和
np.sum(t,axis=1) 计算每一行的和

处理nan的值:把缺失的数值替换成均值(中值)或者直接删除有缺失的一行

inf: inf表示正无穷,-inf表示负无穷


np中的常用统计方法:
求和:t.sum(axis=None)
均值:t.mean(a,axis=None) 受离群点影响较大
中值:np.median(t,axis=None)
最大值:t.max(axis=None)
最小值:t.min(axis=None)
极值:np.ptp(t,axis=None) 计算数组中最大值与最小值之差
标准差:t.std(axis=None)


数组的形状:
reshape
不改变数据的条件下修改形状

flatten
返回一份数组拷贝,对拷贝所做的修改不会影响原始数组


数组的计算:
数组直接对一个数进行加减乘除,产生的结果是数组中的每个元素都会加减乘除这个数。

形状一致的数组对应位置计算
形状不一致的数组(不符合广播原则)无法计算

numpy的广播原则:如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失维度和(或)轴长度为1的维度上进行。

广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。

例如(3,3,2)和(3,2)是可以运算的,因为对于二维数组(3,2)也可以表示为(1,3,2),同理:(4,2,5,4)和(2,1,4)也是可以进行运算的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值