Numpy---用来处理数值型的数据
1. 通过numpy创建数组
数组的创建:
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array(range(1,6))
c = np.arange(1,6)
数组的类名:
In [1]: a = np.array([1,2,3,4,5])
In [2]: type(a)
Out[2]: numpy.ndarray
数据类型:
In [3]: a.dtype
Out[3]: type('int64')
创建时可以对数据类型进行指定:
t1 = np.array([1,2,3,4,5],dtype=float)
t2 = np.array([1,0,1,1,0],dtype=bool)
还可以在创建之后对数据的类型进行修改。
用astype()方法:
t3 = t2.astype('int8')
通过np.round()可以设置取小数的位数:
2. 数组的形状
np.reshape()方法
np.flatten()方法
有返回值,不会改变原数组
3. 数组的计算
- 与数字的计算操作---广播机制
当把数组与数字进行加和、相减、乘法、除法时,会对数组中的每一个数执行相同的操作。
t5 = np.array([[1,2,3],[4,5,6],[7,8,9]])
t6 = t5 + 2
print(t6)
特例:除以0的时候
t7 = t5/0
会报警,但不会报错,能正常运行,同时输出值有两种:inf 和 nan
nan: 0/0 inf: num/0
- 数组与数组的计算操作
相同shape的数组,进行对应位置数字运算
如果是不同shape的数组:会在维度相同的方向上进行运算(每一行或每一列进行运算),如果没有相同的维度,会报错。
数组的广播原则:
如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们时广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
如:shape为(3,3,2)的数组和(3,2)的数组------不可以
shape为(3,3,3)的数组和(3,2)的数组------可以
shape为(3,3,3)的数组和(3,1)的数组------可以
具体的广播机制实现方式可以参考:NumPy中的广播机制 - 知乎 (zhihu.com)
4. 数组的结构
轴:
对于二维数组:0轴-->行 1轴-->列
对于三维数组:0轴-->块 1轴-->块里的行 2轴-->块里的列
5. numpy读取数据
import numpy as np
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
frame : 路径,文件位置
dtype : 数据类型
delimiter : 分割字符串,默认为空格
skiprows : 跳过前x行 设置为0跳过第一行
usecols : 读取指定的列、索引,元组类型
unpack : 如果True,读入属性会分别写入不同数组变量,False读入数据只写入一个数据变量
unpack设置为True实际上起到的是将数组转置的效果
**其他实现数组转置的方法:
- a.transpose()
- a.T
- a.swapaxes()
6. numpy的索引和切片
numpy取某特定行(列):
import numpy as np
t1 = np.arange(6)
##取第三行 % 第三列
p = t1[2,:] % p = t1[:,2]
##取第三行之后的所有连续行 %列
p = t1[2:,:] % p = t1[:,2:]
##取第三行后的五行 %列
p = t1[2:7,:] % p = t1[:,2:7]
##取某几行 %列
p = t1[[2,7,10],:] % p = t1[:,[2,7,10]]
##取某行某列
p = t1[2,4]
##取多行多列
p = t1[2:5,1:4]
##取多个不相邻的点
p = t1[[1,2,4],[0,1,3]] %%取出的是[1,0],[2,1],[4,3]三个点
布尔索引:通过判断的方法对numpy中的数据进行修改
import numpy as np
t2 = np.arange(24).reshape(4,6)
t2[t2<10] = 3
## 首先,t2 < 10会返回一个与t2形状相同的numpy数组,数组元素为bool值
## 根据bool值为True或False对数据进行赋值
numpy中的三元运算符(关于numpy中where的使用):
np.where(t<10,0,10)
##有点类似于 t=0 if t<10 else 10
如果想实现功能为:数组中小于10的赋值为10,大于18的赋值为18,可以通过clip操作来完成
注:这里的nan是一个浮点类型,如果想要给数组中的数赋值为nan的话,首先需要通过astype方法把数据类型转成float,否则将无法完成赋值
7. Numpy中的nan和常用方法
- 数组的拼接
vstack方法和hstack方法
vstack: verticl 竖直方向拼接
hstack: horizon 水平方向拼接
- numpy中的随机方法
- numpy中的nan和常用统计方法
什么时候会出现nan:数据有缺失的情况下或出现不合适的计算的时候
什么时候出现inf:正无穷和负无穷
属性:两个nan是不相等的
In [1]: np.nan == np.nan
Out[1]: False
In [2]: np.nan != np.nan
Out[2]: True
可以用来判断数组中nan的个数
## np.count_nonzero()方法的使用
t2 = np.array([....])
##因为nan和nan是不相等的,所以会返回true,其他值则返回false
np.count_nonzero(t2!=t2)
np.isnan(t2)
常用的numpy统计函数
t.sum()
t.mean()
np.median()##中值
t.max()
t.min()
np.ptp()##极值,最大与最小的差
t.std()##标准差
##默认返回整个数组的统计结果,可以通过指定axis返回某一个轴上的结果
- numpy中填充nan和YouTube数据的练习