目录
一. numpy 轴axis
概述: 轴在numpy中可以理解为方向,使用 0,1,2...数字表示。
- 对于一个一维数组, 只有一个0轴(行);
- 对于二维数组shape(2,3), 有一个0轴(行)和1轴(列);
- 对于一个三维数组shape(2,3,4), 有一个0轴(块),1轴(行),2轴(列)。
图解:
二、numpy读取数据
格式: np.loadtxt(frame, dtype = np.flaot, delimiter=None, skiprows = 0, usecols=None, unpack=None)
参数 | 解释 |
---|---|
frame | 文件、字符串或产生器, 可以时.gz或bz2压缩文件(传入文件路径) |
dtype | 数据类型,可选, CSV的字符串默认是以np.float数据类型读入数组中 |
delimiter | 分隔字符串,默认是任何空格 |
skiprows | 跳过前x行,一般跳过第一行的表头 |
usecols | 读取指定的列,索引,元组类型 |
unpack | 如果是True,读入属性将被分别写入不同数组变量,False读入数据只写入一个数组变量, 默认是False。(大白话: 转置。) |
演示1: 当读取CSV文件,只写文件名会会报错.
# 1.当不写 delimiter时会报错,因为CSV(Comma-Separated Values)是以逗号分隔值的文件
t1 = np.loadtxt('./numpy读取数据.csv')
print(t1)
# 此代码会报错
演示2: 当读取CSV文件, 需要添加逗号分隔符, 并且将标题行跳过.
# 2.获取文件, 用逗号做分隔符(delimiter), 并跳过标题行(skiprows)
t2 = np.loadtxt('./numpy读取数据.csv',delimiter=',',skiprows=1)
print(t2)
# csv文件类型默认是float64
print(t2.dtype)
演示3:将文件的行列转换(unpack)
# 3.将文件的行列转换(unpack)
t3 = np.loadtxt('./numpy读取数据.csv',delimiter=',',skiprows=1, unpack=True)
print(t3)
拓展: numpy中的转置其他实现方式:
- ndarray.transpose()
- ndarray.T
- ndarray.swapaxes(1,0) # 行列交换轴
三、numpy索引和切片
1. 获取行
格式:
- 取一行:写对应行的索引. 例如: ndarray[2]
- 取连续的多行:切片索引. 例如: ndarray[2: ]
- 取不连续的多行: 需要两个方括号, 添加需要获取的行索引. 例如: ndarray[[2, 4, 8]]
- 通用取行方式: 格式 ndarray[行, 列]. 其中冒号表示所有. 例如: ndarray[2, :] , ndarray[2: , : ] , ndarray[[2, 4, 8], :]
# 创建一个3行6列的二维数组
t = np.arange(18).reshape((3,6))
print(t)
print('-' * 31)
# 1. 获取第三行
print(t[2])
print('-' * 31)
# 2. 获取第二行及以后的数据
print(t[1:])
print('-' * 31)
# 3. 获取第1行和第3行的数据
print(t[[0,2],:])
2. 获取列
格式:
- 取一列 : ndarray[: , 2]
- 取连续的多列 : ndarray[: , 2:]
- 取不连续的列 : ndarray[: , [2, 4, 8]]
- 取多行多列 : ndarray[[2:5] , [3:7]]
- 取单个点(取的是行和列交叉点位置的数) : ndarray[2 , 3]
- 取多个不相邻的点 : ndarray[[2,5,8] , [3,7,9]]
四、numpy中数值的修改
拓展:
- numpy的三元运算: where(判断条件, 成立则执行, 不成立则执行).
- numpy中的裁剪 cilp(a, a_min, a_max, out=None, **kwargs), 用于用于保留数组中在间隔范围内的值.
- a:要被剪裁的NumPy数组
- a_min: 是最小值,可以是数值,NumPy数组或者空值None
- a_max: 是最最大值,可以是数值,NumPy数组或者空值None。最大值和最小值最多只有一个可以为空值None。如果a_min或者a_max是数组那么其维度必须与a相同。
- out:数组,默认为None。结果将放置在此数组中。可以为输入阵列。out必须具有正确的维度才能保存输出
# 创建一个3行6列的二维数组
t = np.arange(18).reshape((3,6))
print(t)
print('-' * 31)
# 将第3列和第4的值赋为0
t[:,2:4] =0
print(t)
# 把t中小于10 的值替换成3, bool的方式
t[t<10] = 3
print(t)
# # 可以利用numpy的三元运算符: where(条件, 成立则执行,否则执行), 把小于10 的替换为0 , 大于10的替换为20
print(np.where(t < 10, 0, 20))
print('-' * 31)
# 可以利用中的clip(裁剪)操作: 把小于10 的替换为0 , 大于15的替换为15
print(np.clip(t, 10, 15))
注意: 数值修改 无法对nan值起效. 若要修改nan值, 需要现将ndarray转为float( 格式: t.astype(float)), 再对其进行修改.