Numpy 学习笔记
目录
建立数组
t1 = np.array([0,1,2,3,4,5,6,7,8])
t2 = np.array(range(9))
t3 = np.arange(9)
type()查看的是变量的类型
dtype查看数组内部的数据类型
print(type(t1))
print(t1.dtype)
#结果
<class 'numpy.ndarray'>
int32
指定更改数据类型
#指定数据类型
t1 = np.arange(10,dtype = "int64")
#更改数据类型
t2 = t1.astype(dtype = "float")
#保留指定位数小数
t3 = np.round(random.random(),2)
数组的形状
t1 = np.arange(24)
print("t1:",t1.shape)
t2 = t1.reshape(4,6)
print("t2:",t2.shape)
t3 = t1.reshape(2,3,4)
print("t3:",t3)
t4 = t1.reshape(24,)
print("t4:",t4)
t5 = t1.reshape(24,1)
print("t5:",t5)
t6 = t5.flatten()
print("t6:",t6)
t7 = t2.reshape(t2.shape[0]*t2.shape[1],)
print("t7:",t7)
#结果
t1: (24,)
t2: (4, 6)
t3: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
t4: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
t5: [[ 0]
[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]]
t6: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
t7: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
【注意】
1、reshape不会对原值产生更改
2、reshape(24,)传一个值才是一维。
reshape(t1.shape[0]*t1.shape[1],) = flatten
数组的计算
和数字进行计算
数组内每一个值分别和数字进行计算
和数组进行计算
形状一样的数组对应位置相加(减乘除)
形状不同的数组
在某一个方向上个数一致可以计算
np.sum
#axis = 0 对列求和
np.sum(t2,axis = 0)
#axis = 1 对行求和
np.sum(t2,axis = 1)
#省略axis对整个数组求和
数组的轴
reshape(2,3,4)
axis = 0 (2)
axis = 1 (3)
axis = 2 (4)
Numpy 读取数据
#delimiter 需要指定
#unpack 相当于转置,交换行列
np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
在numpy中有三种方法可以实现转置
t1.transpose()
t1.T
t1.swapaxes(1,0)
#swapaxes参数将1放在0前面
numpy 中的切片和索引
#取行
gb_video[2]
#取连续多行
gb_video[2:]
#取不连续的多行
gb_video[[2,4,5]]
#取列
gb_video[:,2]
#取不连续的列
gb_video[:,[1,3]]
#取多个相邻点
gb_video[2:5,1:5]
#取多个不相邻的点(0,1)(3,2)
gb_video[[0,3],[1,2]]
按条件进行赋值
#布尔索引
t1[t1>20] = 1000
#np.where
#不改变t1
np.where(t1>=50,700,-1)
#t1.clip()
#不改变t1
t1 = np.arange(24).reshape(4,6)
print(t1.clip(5,20))
print(t1)
#t1[:,-1]取最后一列
nan and inf
nan(NAN,Nan):not a number表示不是一个数字
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)
nan的性质
nan的特性
#1、两个nan是不相等的
#2、判断数组中nan的个数
#用np.isnan()
t2 = np.arange(60,84).reshape(4,6).astype(float)
t2[2,4] = np.nan
t2[2,2] = np.nan
nan = np.count_nonzero(np.isnan(t2))
#用nan!=nan
nan2 = np.count_nonzero(t2!=t2)
#3、nan和任何数计算都是nan
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
一个数字除以0会出现inf
#赋值成nan
#nan和inf都是浮点型,如果数组的值是整型需要先转化为浮点型
a = np.nan
nan的处理方法
比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
数据的拼接和拆分
#竖直拼接
np.vstack((t1,t2))
#水平拼接
np.hstack((t1,t2))
t1 = np.arange(24).reshape(4,6)
t2 = np.arange(60,84).reshape(4,6)
print("竖向拼接")
print(np.vstack((t1,t2)))
print("横向拼接")
print(np.hstack((t1,t2)))
#结果
竖向拼接
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[60 61 62 63 64 65]
[66 67 68 69 70 71]
[72 73 74 75 76 77]
[78 79 80 81 82 83]]
横向拼接
[[ 0 1 2 3 4 5 60 61 62 63 64 65]
[ 6 7 8 9 10 11 66 67 68 69 70 71]
[12 13 14 15 16 17 72 73 74 75 76 77]
[18 19 20 21 22 23 78 79 80 81 82 83]]
数组的行列交换
#交换行
t1[[1,2],:] = t1[[2,1],:]
#交换列
t1[:,[1,2]] = t1[:,[2,1]]
np.zeros/np.ones/np.eye
np.zeros(us_data.shape[0],1).astype(int)
np.ones(uk_data.shape[0],1).astype(int)
#生成一个对角线为1的方阵
np.eye(10)
Numpy生成随机数
np.random.----
numpy 中的统计公式
#返回每一行的最大值
np.argmax(t,axis = 0)
#返回每一行的最小值
np.argmin(t,axis = 0)
#求和:
t.sum(axis=None)
#均值:
t.mean(a,axis=None)
#中值:
np.median(t,axis=None)
#极值:
np.ptp(t,axis=None)
#标准差:
t.std(axis=None)