数据类型numpy as np
常见的数据类型
int8/16/32/64代码类型:i1/i2/i3/i4
float16/32/64代码类型:f2/f4/f8
complex64/128代码类型:c8/16
bool代码类型:?
数据类型的操作
1创建指定数据类型的数组array:
a = np.array([1,0,1,0],dtype=np.bool)np.bool可以用“?”代替
2修改数据类型
a.astype(‘i1’) or a.astyle(np.int8)
np.round(b,2):::b是数组,2是小数部分的位数。
3查看、修改数组的形状
a.shape:查看数组的形状(有几行几列)
a.reshape(3,4):修改数组的形状(改成3行4列)
修改存在前提,必须是在数组的数量行乘列数量等于新的数组的行列乘积
b.flatten():降维
4数组的计算
1数组和数
加减乘除可以直接用,类似python的用法就相当于给数组的每一个数和这个数计算加减乘除。
2相同维度数组和数组
数组和数组对应位置的数进行单独的运算。
3不同维度数组和数组
加减
a= 2行多列;b= 1行多列
a-b:a 的每一行一行一行的减去b
乘除
同样的一行乘一行然后再乘第二行。。。
总之就是两个数组四则运算就是要求两个数组有相同的行或者列。然后按照我们最常规的一行或者一列一列的想运算。
轴(axis)
二维数组的轴:0轴列向的和1轴行向的;
三维数组的轴是0,1,2轴;
对数据的操作
0如何简单的创建一个数组
a= np.arange(12,24).rshape(3,4)
把一个从12到23 的数据改成3行4列的数据
全为0的数组:np.zero((3,4))
全为1的数组:np.ones((3,4))
对角线1的数组:np.eye(3)
1读取数据
np.loadtxt(frame,delimiter=','dtype=int,unpack=1。。。)
np.loadtxt()函数的一些参数
- frame文件字符串,gz,bz2压缩文件(就是文件的路径/名字)
- dtype:指定数组表现的类型比如int默认对于一些比较大的值会以科学计数法表示
- delimiter:****分割字符串默认空格,改为 **,**一般只用这个
- usecols:读取指定的 行,索引,元组类型,
- skiprows:跳过前x行,一般只跳过第一行表头。
- unpack就是转置默认是False(0)可以改为1
2转置数据
方法1:t.swapaxes(1,0)“这里的1,0是指0轴和1轴”
方法2:t.transpose()
方法3:t.T
3数据切片
array----数组a
1. a[1:3,1:4]
逗号前面1:3是选取1、2行
逗号后面1:4是选择1,2,3列
还可以在这个基础上加 **步长**
2. a[[1,3],:]
[[1,3]]是指1,3行
[[],[]]里面的 ‘:’是指选取所有的列
3 .a[[0,2],[1,1]]
取的是(0,1)点和(2,1)点
4数值修改
a[:2:4] =0 ====第二到第三列的所有数据都改为0
a[<10]=0 ======把小于10的数改为0
np.where(a<10,0,10)======把小于10的数改为0大于等于10 的改为10
a.clip(10,18)======小于10的改为10,大于18的改为18
5nan和inf
nan是not a numberde 的简写,就是不是一个数字
nan和任何值计算都是nan
inf是正无穷,-inf是负无穷
如何判断是不是nan?
np.isnan(a)
如何把nan改为0?
a[np.isnan(a)]=0
如何统计nan的数量(下面是非nan的数量)?
np.count_nonzero(t!=t)
np.count_nonzero(t[:, i] [t[:,i]=t[:,i]])
6,numpy常用的统计函数
求和:t.sum(axis=none)
均值:t.mean(a,axis)
中值:np.median(t,axis)
最大最:t.max(axis)小值:t.min(axis)
最大值的位置np.argmax(t.axis=?)
极值:np.ptp(t,axis)
标准差:t.std(axis)
7数组的拼接
1竖直拼接:把数据上下拼起来
np.vstack((t1,t2))
注意:要保证t1t2的每列数据有同样的意义不然就拼接没有意义
2水平拼接:把数据左右拼起来
np.hstack((t1,t2))
8数据的行列交换(类似于py基础的那种交换)
只展示行交换:t.[[1,2],:]=t[[2,1],:]
9生成随机数的方式
.rand(d0,d1…)创建d0到dn维度的随机数数组0到1之间的
randn()标准正态分布的随机浮点数,平均值是0,标准差是1
randint(low,high,(shape))最大最小值,加形状
…
其他注意点:
a=b不完全复制,ba相互影响
a=b[:]视图操作,会创建新的对象b但是还是会受a影响
a = b.copy()复制后,ab不相互影响