2020-11-20 数据科学库(3) numpy的使用

1411-李同学

发表文章数:148

热门标签

, ,
首页 » 数据科学库 » 正文

numpy学习

1、什么是numpy

  • 快速

  • 方便

  • 科学计算的基础库

2、什么是numpy

一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用在大型、多维数组上执行数值运算。

3、numpy创建数组

import numpy as np
import  random



#使用numpy生成数组,得到ndarray的数据类型
t1=np.array([1,2,3])
print(t1)
print(type(t1))

t2=np.array(range(10))
print(t2)

t3=np.arange(4,10,2)
print(t3)
print(t3.dtype) #int32

#numpy中的数据类型
t4=np.array(range(1,4),dtype=float)
print(t4)
print(t4.dtype)

##numpy 中的bool类型
t5=np.array([1,1,1,1,0,0,1],dtype=bool)
print(t5)
print(t5.dtype)

#调整数据类型
t6=t5.astype("int8")
print(t6)
print(t6.dtype)

#numpy中的小数
t7=np.array([random.random()for i in range(10)])
print(t7)
print(t7.dtype)

t8=np.round(t7,2)
print(t8)

4、数组的形状

import numpy as np
import  random
# numpy.shape
t1=np.array([[1,2,3],[4,5,6]])
print(t1)
print(t1.shape)

#reshape
t2=np.arange(12)
print(t2.reshape(3,4))

t3=np.arange(24)
print(t3.reshape(2,3,4)) #两块三行四列

print(t3.reshape(4,6)) #t5本身不发生变化

print(t3.reshape(24,)) #当shape内只有一个值的时候才是一维数组

#t6=t3.reshape((t3.shape[0]*t3.shape[1],))
print("***********")
print(t3.flatten())

5、数组之间的运算

import numpy as np

#数组与数据的计算
t5=np.arange(24)
t6=t5.reshape(4,6)
print(t6)

print(t6+2) #每个数组中的元素都加2 广播机制
print(t6*2)

#nan(不是一个数字):0/0 inf(无限的):num/0

#数组与数组的计算
t7=np.arange(100,124).reshape(4,6)
print(t6+t7) #对应位数相加。

t8=np.arange(0,6) #对于每一行的运算
print("********")
print(t6-t8)

t9=np.arange(4).reshape((4,1)) #对于每一列的运算
print(t9)
print(t6-t9)

#t10=np.arange(10)
#print(t6-t10) 这种情况会报错

当二维数组与三维数组进行计算时,将三维数组想象为一个立方体,当二维数组的平面形状可以与立方体的一个面一致时,两者之间可以进行运算。

6、轴

  • 二维数组的轴,横轴和纵轴

  • 三维数组,xyz轴

7、numpy读取数据

np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
  • dtype:数据类型

  • delimiter 分割字符串,默认为空格

  • skiprows 跳过前x行,一般跳过表头

  • usecols 读取指定的列,索引,元组类型

  • unpack:如果为True,读入属性将分别写入不同数组变量,false读入数据只写入一个数组变量,默认False。

8、转置

t2=np.arange(24).reshape(4,6)
print(t2.transpose())
print(t2.T)
print(t2.swapaxes(1,0)) #交换轴

9、索引和切片

import numpy as np

t1=np.array([4394829,320053,5931,46245,7860119,185853,26679,0,5845909,576597,39774,170708])
t2=t1.reshape(3,4)
print(t2)
print("*********************************")
#取行
print(t2[2])


#取连续多行
print(t2[2:])
print("*********************************")
#取不连续的多行
print(t2[[1,2]])

#取列
print(t2[1,:]) #逗号前面表示行,后面表示列
print("*********************************")
print(t2[:,1])
print("*********************************")
#取连续的多列
print(t2[:,1:])
print("*********************************")
#取不连续的多列
print(t2[:,[0,2]])
print("*********************************")
#取多行和多列,取第三行,第四列
a=t2[2,3]
print(a)
print(type(a)) #类型为numpy.int32 数组类型
print("*********************************")
#取第一行到第二行,第二列到第三列,取的是行和列交差点的位置
print(t2[0:2,1:3])

#取多个不相邻的点
c=t2[[0,2,2],[0,1,3]] #前括号是行,后括号都是列
print(c)

10、布尔索引和clip方法

import numpy as np
t1=np.array([4394829,320053,5931,46245,7860119,185853,26679,0,5845909,576597,39774,170708])
t2=t1.reshape(3,4)
print(t2)
print("*********************************")

#修改值只需重新赋值

#取值
print(t2<50000) #返回trueor false
print("*********************************")
print(t2[t2<50000])

#布尔索引
t2[t2<10]=5
print(t2)

#将小于10的替换为10,大于20的替换为20,clip操作
#np.where(t2<10,0,10)
print(t2.clip(10,20))

#nan不会被替换
t2=t2.astype(float)
t2[2,3]=np.nan
print(t2)

11、数据的拼接

import numpy as np

t1=np.arange(12).reshape(2,6)
t2=np.arange(12,24).reshape(2,6)

#竖直拼接
print(np.vstack((t1,t2)))


#水平拼接
print(np.hstack((t1,t2)))

12、交换数据的行列

import numpy as np

t1=np.arange(12).reshape(2,6)
t2=np.arange(12,24).reshape(2,6)

#拼接时可能每一列的数据内容不容
#第一行和第二行交换
t1[[0,1],:]=t1[[1,0],:]
print(t1)

13、numpy常用方法

np.argmax(t,axis=0) #获取最大值,取每一列的最大值

np.argmin(t,axis=1)  #获取最小值  取每一行的最小值

np.zeros((3,4))  #创建一个全为0的数组

np.ones((3,4))  #创建一个全为1的数组

np.eye(3)  #创建一个对角线为1的正方形数组

14、生成随机数

2020-11-20 数据科学库(3) numpy的使用

15、numpy数组的列添加和二次拼接

import numpy as np


#加载国家数据

us=np.arange(12).reshape(2,6)
uk=np.arange(12,24).reshape(2,6)
print(us)
print(uk)

#添加国家信息
#构造全为0的数据
zero=np.zeros((us.shape[0],1))
one=np.ones((uk.shape[0],1))

#拼接两组数据,分别添加全为0,1的数组
us=np.hstack((us,zero))
uk=np.hstack((uk,one))

final=np.vstack((us,uk))

print(final)

2020-11-20 数据科学库(3) numpy的使用

16、nan

  • nan :not a number:表示不是一个数字

  • inf :infinity,inf表示正无穷,-inf表示负无穷。

  • 两个nan不相等

  • np.nan!=np.nan

  • 利用以上特性可以判断数组中nan的个数,np.count_nonzero(t!=t)

  • 判断是否含有nan: np.isnan(a)

  • nan和任何值计算都为nan

将一组数组中的nan都替换为0,替换后的平均值肯定会变小,所以更一般的方式是把确实的数值替换为均值或者是直接删除有缺失值的一行。

import numpy as np
t1=np.arange(24,dtype=float).reshape(4,6)
t1[3,3]=np.nan
#print(t1)
print(np.sum(t1))
t2=np.arange(12).reshape(3,4)
print(np.sum(t2))
print(np.sum(t2,axis=0))
print(np.sum(t2,axis=1))
print(np.sum(t1,axis=0))
t1[np.isnan(t1)]=0
print(t1)

17、numpy常用统计函数

#numpy中常用统计函数
t1.sum(axis=None)  #求和
print(t2.mean(axis=0)) #求平均值
np.median(t1,axis=None) #求中间值
t1.max(axis=None)  #求最大值
t1.min(axis=None)  #求最小值
np.ptp(t1,axis=None)  #求极值,最大值与最小值的差
t1.std(axis=None)   #求标准差

总结

1、如何选择一行或者多行的数据

切片和索引

  • 选择行 t[2], t[3:,:]

  • 选择列 t[,4]

  • 选择行列 不连续的 t[[2,3],[2,3]]

连续的: t[2:,3:]

  • 索引 t[2,3]

2、给选择的行和列赋值

  • 赋值 t[2:.3]=3

3、把大于10的替换

  • 布尔索引

t[t>10]=10

  • 三元运算符

np.where(t>10,20,0) 把t中大于10的换位20,其他替换为0

  • 裁剪 t.clip(10,20) 小于10的替换为10,大于10的替换为20

4、转置

  • t.T

  • t.transpose()

  • t.swapaxes(1,0)

5、读取本地文件

np.loadtxt(filepath,delimiter,dtype)

6、np.nan/np.inf

nan表示不是一个数字

  • np.nan!=np.nan

  • np.count_nonzero(np.nan!=np.nan)

  • np.isnan(t)

inf表示无穷的

7、常用的统计函数

  • t.sum()

  • t.mean

  • np.median(t)

  • t.max()

  • t.min()

  • np.ptp(t)

  • t.std(): 标准差反应数据的离散程度或者说稳定程度。

取一个数组的两列绘制散点图

要筛选掉一些不规则数据2020-11-20 数据科学库(3) numpy的使用

未经允许不得转载:作者:1411-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《2020-11-20 数据科学库(3) numpy的使用》 发布于2020-11-20

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录