numpy
python中做科学计算的基础库,重在数字计算,也是大部分python科学计算库的基础
一. numpy数组的创建
首先导入numpy:
import numpy as np
- a = np.array([1,2,3,4,5])
- b = np.array(range(1,6))
- c = np.arrange(1,6)
np.arange([start,] stop[,step], detype= None)
数组的类名type:numpy.ndarray
数据的类型:detype(“int64”)
指定创建的数组的数据类型:
a = np.array([1,0,1,0], dtype=np.bool) 或者使用“dtype=’?’ ”
修改数组的数据类型:
a.astype(“i1”); 或者使用a.astype(np.int8)
修改浮点型的小数位数:
以数组a为例:
np.round(a, 2)
二. 数组的形状、数组与数的运算、数组与数组的运算
数组的形状: 以数组a为例:
- 查看数组的形状: a.shape
- 修改数组的形状:a.reshape(m,n) #m行n列的二维数组
为有返回值操作
a.flatten() 展平成1维
数组与的计算:
数组与数的运算(加、减、乘、除)在numpy中符合广播机制,加减乘除的值被广播到数组的所有元素上。
数组与数组的计算
如果两个数组的后缘维度(及从末尾开始算起的维度)的轴长度相符或一方的长度为1,则认为他们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
轴
轴在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个以为数组,只有0轴,对于数组(shape(2,2)),有0轴和1轴。对于三位数组(shape(2,2,3)),有0,1,2轴。
三. numpy读取数据
读取本地CSV数据为例
np.loadtxt(“文件路径”,delimiter=",", dtype='int ', unpack=1) #dtype默认为np.float.
delimiter:指定边界符号是什么,不指定会会导致每行数据为一个整体的字符串而报错;
dtype:默认情况下对于较大的数据会将其变为科学计数的方式
unpack:默认是False(0),默认情况下,有多少条数据就会有多少行; 为True(1)的情况下,每一列的数据会组成一行,元素数据由多少列,加载出来的互数据就会有多少行,相当于转置。
numpy中的转置
转置为一种变换,对于numpy数组而言,就是在对角线方向交换数据。
- t.transpose()
- t.swapaxes() 交换轴
- t.T
转置和交换轴的效果一样
四、numpy的索引和切片
切片:选取一部分
索引:取一个值
切片
- 取一行:t[2]
- 取多行:t[1:3]; t[3:,:]
- 取一列:t[:,2]
- 取多列:t[:, 2:4]
- 取连续多行多列:t[2: ,: 3]
- 取不连续的多行多列:t[[1,3],[2,4]] # 选择的是(1,2),(3,4)位置的值。
numpy中数值的修改
t[:,2:4]=0 #把数组t中第二列和第三列的值替换为0
numpy中的布尔索引:t[t>10]=10
numpy中的三元运算符:np.where(t<10,0,10) #把数组t中小于10的元素替换成0,把大于10的元素替换为10
numpy中的裁剪(clip):t.clip(10,20) # 把数组t中小于10的元素替换为10,大于20的元素替换为20.
五、numpy中的nan和inf
nan(NAN,Nan):not a number 表示不是一个数字
当读取本地文件为float时,如果有缺失,就会出现nan值;
当做了一个不合适的计算时(比如无穷大(inf)减去无穷大)
inf(-inf,inf):infinity, inf表示正无穷,-inf表示负无穷。
如一个数字除以0,在python中会直接报错,numpy中是一个inf或-inf)
numpy中nan的注意点:
- 两个nan是不相等的;
- nan和任何值计算都为nan.
利用上述特性,判断数组中nan的个数,或作替换等。
六、numpy中常用的统计函数
- 求和:t.sum(axis=None)
- 均值:t.mean(a,axis=None)
- 中值:np.median(t,axis=None)
- 最大值:t.max(axis=None)
- 最小值:t.min(axis=None)
- 极值:npptp(t, axis=none)
- 标准差:t.std(axis=None)
七、数组拼接
np.vstack(t1,t2) 竖直拼接
np.hstack(t1,t2) 水平拼接
数组行列变换:
t[[1,2],:]=t[[2,1],:] #行变换
t[:,[0,2]]=t[:,[2,0]] #列变换
其他方法:
获得最大值、最小值的位置:
np.argmax(t,axis=0)
np.argmin(t,axis=1)
创建一个全0数组:np.zeros((3,4))
创建一个全1数组:np.ones((3,4))
创建一个对角线为1的正方形数组(方阵):np.eye(3)
numpy生成随机数:
nprandom.randint(10,20,(4,5)) # 生成一个范围在10至20之间,4行5列的整数数组。