numpy
概念
科学计算基础库,多作为数值计算、在大型、多维数组上执行数值运算。
-
创建数组
import numpy as np a = np.array([1,2,3,4,5]) b = np.array(range(1,6)) c = np.arange(1,6) # 其中 a = b = c np.arange的用法:arange([start], stop[, step,], dtype=None)
- c.dtype获取c中数据的类型
- c.astype(‘int8’)修改数据类型
- np.round(c, 2), 将元素为小数类型的数组,保留2位小数
-
数组的形状
t = np.array([[1,2,3], [4,5,6]]) t.shape # 获取t的形状,即维数
-
reshape((2,3)) 修改形状,修改后是新值,而原数组不变
-
flatten() 展开数组
-
shape的值:
一个值(a, ) ----- 一维 ----- a表示数组中元素的个数
两个值(a, b ) ----- 二维 ---- a表示数组中元素的行数,b表示数组中元素的列数
三个值(a, b,c ) ----- 三维 ---- a表示数组中元素的块,b表示数组中每一块元素的行数,c表示数组中每一块元素的列数
-
-
计算
-
数组 和 常数:数组中每一个元素和常数进行运算。
其中:(0/0=nan ; 非零常数/0 = inf)
-
数组(a) 和 数组(b)
-
二维:
(1)维数相同: 两个数组对应位置上的元素进行运算
(2)行数相同(a(3,1),b(3,5)): b的每一列和a进行运算
(3)列数相同(a(1,2),b(4,2)): b的每一行和a进行运算
(4)行数和列数不等:报错
-
多维(广播原则)
如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中方的长度为1,则他们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
eg: (3,3,3)和(3,2) --> 不兼容
(3,3,2)和(3,2) --> 兼容
-
-
-
轴
-
一维:0轴
-
二维:横为0轴,纵为1轴
-
三维:块为0轴,每一块的横为1轴,每一块的纵为2轴
-
-
读取本地数据
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
frame: 文件路径
dtype:读取为指定的数据类型
delimiter:分割字符串
skiprows:跳过的行(如:标题行)
usecols:读取的数据的列
unpack:若为true,矩阵转置
numpy 转置:
(1)
transpose()
方法(2)
T
属性(3)
swapaxes(1,0)
方法,0和1分别为轴
索引和切片
-
取行
- 单行:
t[行数]
- 连续多行:
t[行数:]
,从指定行数开始连续取数组的行 - 不连续:
t[[1,5,8]]
, 取第1、5、8行
- 单行:
-
取列
-
单列:
t[行,列]
,取指定的行和列,其中:
表示都要,如t[1,:]
表示第二行的所有列例:
import numpy as np t = np.arange(6).reshape((3,2)) print(t[1,:]) # 取第二行的所有列,结果:[2 3] print(t[2:,:]) # 取第三行之后所有行对应的所有列,结果:[[4 5]] print(t[[0,2],:]) # 取第一行和第三行的所有列,结果:[[0 1] [4 5]] print(t[1:3,0:2]) # 取第二行到第三行对应的第1列到第2列,结果:[[2 3] [4 5]] # 注:其中1:3中3为切片,即含头不含尾,真实值为1到2,所以3对应的是索引为2,而索引为2对应的值为第三行的值。
-
-
取不相邻的点
t[[0,2],[0,1]]
, 取下标为(0,0)和(2,1)对应的值
修改
-
条件修改
t[t<10]=3
将t中小于10的值 -
where方法
np.where(条件,符合条件的元素要赋的值,不符合条件的元素要赋的值)
ge:
np.where(t>10, 0, 20)
将t中小于10 的元素替换为10,大于等于10的赋值为20 -
clip方法
t.clip(value1,value2) 把小于value1的元素替换为value1, 大于value2的元素替换为value
常用函数
-
求和
- 整个数组的和:
np.sum(数组)
- 各个列对应的和:
np.sum(数组,axis=0)
- 各个行对应的和:
np.sum(数组,axis=1)
- 整个数组的和:
-
均值
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)
- 计算函数
-
求和
- 整个数组的和:
np.sum(数组)
- 各个列对应的和:
np.sum(数组,axis=0)
- 各个行对应的和:
np.sum(数组,axis=1)
- 整个数组的和:
-
均值
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)
-
操作函数
-
拼接
np.vstack((t1, t2))
竖直拼接np.hstack((t1, t2))
水平拼接
-
分割:竖直分割(水平划线)
水平分割(竖直划线)
-
-
交换
t[[1,2], :] = t[[2,1], :]
行交换t[:, [1,2]] = t[:, [2,1]]
列交换 -
常用函数
创建全为0的数组:
np.zeros((2,2))
创建全为1的数组:
np.ones((2,2))
创建三角方阵:
np.eye(2)
获取每列最大值的坐标:
np.argmax(数组,axis=0)
获取每行最小值的坐标:
np.argmin(数组,axis=1)
创建随机分布数组
np.random.random(2,3)
创建两行三列的随机分布创建标准正态分布数组
np.random.randn(2,3)
创建两行三列的标准正态分布创建指定区间的随机整数数组
np.random.randint(start,end,(row, col))