1:什么是numpy:
一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于大型多维数组上执行数值运算。
2:创建数组:
import numpy as np
t1 = np.array([1,2,3,])
print(t1)
t2 = np.array(range(10))
print(t2)
t3 = np.arange(12)
print(t3)
3:ndarray对象特性:
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:
-
一个指向数据(内存或内存映射文件中的一块数据)的指针。
-
数据类型或 dtype,描述在数组中的固定大小值的格子。
-
一个表示数组形状(shape)的元组,表示各维度大小的元组。如果列表只有一行,a.shape,表示元素个数是一个元祖(12,),如果不只一行,表示的是纬度,几行几列,也是一个元祖(2,3)
-
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
2:flatten()将多位数组展开成一维数组。reshape(行,列),数组纬度间转换。
3:数组间的运算:
二维:只要是行或者列能一致就能进行运算,三维数组,前两个或者后边两个一致就可以进行运算
4:numpy的轴:
在numpy中可以理解为方向,使用0,1,2。。。数字表示,对于一个一维数组,只有一个0轴,对于二维数组(shape(2,2)),有0轴和1轴,对于三维数组shape(2,2,3),有0,1,2轴。计算一个2维数组的平均值必须指定是计算哪个方向上的平均值。
二维:0轴是x轴方向,1轴表示的是y轴的反方向;三维:0轴是z轴的反方向,表示块,1轴是x轴正方向,2轴是y的反方向。
5:numpy读取数据:
CSV:Comma-Separated Value, 逗号分割值文件。由于csv便于展示,读取和写入,所以很多地方用csv的格式存储和传输中小型的数据。
显示:表格状态
源文件:换行和逗号分割行列的格式化文本,每一行数据表示一条记录。
numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')
- fname:文件名/文件路径,如果文件后缀是
.gz
或.bz2
,文件将被解压,然后再载入 - dtype:将读出来的数据指定成什么类型
- comments:文件头部或者尾部字符串的开头字符,用于识别头部,尾部字符串
- delimiter:划分读取上来值的字符串,默认是空格,csv要改成逗号
- converters:数据行之间的分隔符
- skiprows:跳过哪一行
- usecols:读取指定的列,索引,元祖类型
- unpack:如果是True,读入的属性分别写入不同数组变量,False读入的数据只写入一个数组变量,默认是False。相当于顺时针旋转180度,将原来的行转成列,即转置。
6:二维数组转置:
a1 = np.array(range(24)).reshape((2,12))
print(a1)
# 转置
a2 = a1.transpose()
print(a2)
a3 = a1.swapaxes(1, 0) # 0轴跟1轴交换
print(a3)
a4 = a1.T
print(a4)
7:二维数组的切片
print(t2[2]) # 取行 print(t2[2, :])
print(t2[2:]) # 取连续几行 print(t2[2:, :])
print(t2[[1, 3]]) # 取不连续几行print(t2[[2,1], :])
# 取一行就是一维,取多行将会是多行,几列,还是二维
# []中逗号前是取行,逗号后是取列
print(t2[:, 1]) # 取第一列
print(t2[:, 1:])
print(t2[:, [1, 3]]) # 取第一列跟第三列
#取多行多列
print(t2[1, 2]) # 结果是一个数,但是是64位的类型
print(t2[1:3, 2:3]) # 取第2到3行,第3列的数
print(t2[[0, 1], [1, 2]]) # 取的是第一行第二列跟第二行第三列的值
8:numpy中数值修改
# 布尔索引
print(t2[t2<4000]) # [2124 3523 3465 3424 1213 2514 3422 1242] 赋值直接=0即可
# 三元运算符where
print(np.where(t2<2000, 0, 100)) # 条件成立赋值0,不成立赋值100
#裁剪clip
print(t2.clip(2000, 4000)) # 小于2000替换成2000,大于4000换成了4000
#赋值成为nan
t2 = t2.astype(float) # nan是个float类型
t2[3,3] = np.nan
print(t2)
9:数组的拼接
np.vatack((t1, t2)) # 竖直拼接
np.hstack((t1,t2)) # 水平拼接
10:数组行列交换
注意点:竖直拼接的时候:每一列的意义相同,否则牛头不对马嘴。
t[[1, 2], :] = t[[2, 1], :] # 行交换
print(t)
t[:, [1,2]] = t[:, [2,1]] # 列交换
print(t)
11:numpy更加好用的方法
# 创建全为0的全为1的数组
zero_data = np.zeros((t.shape[0], 1)).astype(int)
one_data = np.ones((t.shape[0], 1)).astype(int)
print(zero_data)
print(one_data)
# 矩阵对角线为1,其他为0
u = np.eye(10).astype(int)
print(u)
print(np.argmax(u, axis=0)) # 每一行上最大值的位置
t[u == 1] = -1
print(np.argmin(u, axis=0)) # 每一行上最大值的位置
统计多少:np.count_nonzero(u) 统计u 中不是0的个数
np.sum(u, axis=0)没有指定axis时求所有数值的和,当等于0时分别求没列的和,当等于1时,分别求每一行的和。
12:numpy生成随机数
函数名称 | 函数功能 | 参数说明 |
---|---|---|
rand(d0, d1, …, dn) | 产生均匀分布的随机数 | dn为第n维数据的维度 |
randn(d0, d1, …, dn) | 产生标准正态分布随机数 | dn为第n维数据的维度 |
randint(low[, high, size, dtype]) | 产生随机整数 | low:最小值;high:最大值;size:数据个数 |
random_sample([size]) | 在[0,1)内产生随机数 | size:随机数的shape,可以为元祖或者列表,[2,3]表示2维随机数,维度为(2,3) |
random([size]) | 同random_sample([size]) | 同random_sample([size]) |
ranf([size]) | 同random_sample([size]) | 同random_sample([size]) |
sample([size])) | 同random_sample([size]) | 同random_sample([size]) |
choice(a[, size, replace, p]) | 从a中随机选择指定数据 | a:1维数组 size:返回数据形状 |
bytes(length) | 返回随机位 | length:位的长度 |
13:numpy的注意点copy和view
a = b 完全不复制,a与b相互影响
a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的。
a = b.copy(),复制,a与b互不影响
14:numpy中的nan和inf
什么时候会出现nan:
1)当我们读取一个本地的文件为float的时候,如果有缺失,就会出现nan,因为nan是float类型
2)当做了一个不合适的计算的时候,0/0或者无穷大减去无穷大
什么时候出现inf:(inf表示正无穷,-inf表示负无穷)
1)一个数除以0(python会出现报错,numpy中是一个inf或者-inf),inf也是float类型。
15:nan属性:
- 两个nan不相等
- np.nan != np.nan
- 利用以上特性,判断数组中nan的个数np.count_nonzero(t!=t)=np.count_nonzero(np.isana(t2))统计t中nan的个数
- 由于2,通过np.isnan(a)来判断,返回bool类型
- nan与任何值的运算都是nan
注意点:nan在计算时不能单纯的忽略直接赋值成0,一般情况下会是将却是的值替换为均值(中值),或者是直接删除有缺失值的哪一行。
16:numpy中常用的函数:
求和: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)