数据分析(1)——numpy库的使用

Numpy官网手册中文翻译(引用)
Numpy常用函数总结表格(引用)
一、什么是numpy
一个Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型、多维数组上执行数值运算。

二、numpy的基本操作
1、创建数组

函数功能
np.zeros((3,4))创建一个3行4列全0的数组
np.ones((3,4))创建一个3行4列的全1的数组
np.eye(3)创建一个3行3列的对角线为1的方阵
np.empty([2, 2], dtype=int)根据给定的维度和数值类型返回一个新的数组,其元素不进行初始化
np.linspace(2.0, 3.0, num=5)通常用来创建等差数列,该例子为创建[2.0,3.0]范围内的5个数
np.array([1,2,3],dtype=“i1”)创建数组[1,2,3]且数据类型为int8
np.arange(4,10,2)创建[4,10)范围内并且步长为2的一维数组

2、数组的属性

属性名功能
ndarray.ndim获取数组轴的个数,在python的世界中,轴的个数被称作秩,即获取ndarray的维数
ndarray.shape如一个n排m列的矩阵,它的shape属性将是(n,m)
ndarray.size数组元素的总个数,等于shape属性中元组元素的乘积。
ndarray.dtype用来描述数组中元素类型
ndarray.itemsize数组中每个元素的字节大小

数组形状的显示与修改

#显示数组形状
#一维数组
t1=np.arange(12)
print(t1.shape)#(12,)第二个元素不能写1,写1就不是一维数组了
#二维数组
t2=np.array([[1,2,3],[4,5,6]])
print(t2.shape)#(2, 3)
#三维数组
t3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)
print(t3.shape)#(2, 2, 3)2组2行3列

#修改数组形状
#将一维转换为三维
t4=np.arange(24).reshape((2,3,4))
print(t4)

#三维转换为二维
t5=t4.reshape((4,6))
print(t5)

#二维转换为一维数组
t6=t5.reshape((t5.shape[0]*t5.shape[1],))
print(t6)

t7=t5.flatten()#将数组按行展开,即变成一维数组
print(t7)

3、调整数据类型

t1=np.array([1,1,0,1,0,0],dtype=bool)
t2=t1.astype("int8")#astype()函数改变数据类型为int8
#numpy中的小数
t3=np.array([random.random() for i in range(10)])#随机生成十个小数
t4=np.round(t3,2)#保留两位小数
print(t4)

4、数组的计算

函数名功能
np.add(a,n)数组a的每个元素加上n
np.subtract(a,n)数组a的每个元素减去n
np.multiply(a,n)数组a的每个元素乘以n
np.divide(a,n)数组a的每个元素除以n
np.power(a,n)数组a的每个元素进行n 次乘方
np.mod(a,n)数组a的每个元素对n求余
np.sqrt(a)数组a的每个元素开平方
#数组与数字的计算(广播机制)
t5=np.arange(24).reshape((4,6))
print(t5+2)#使每个数组元素都加2

print(t5*2)#使每个数组元素都乘以2

print(t5/2)#使每个数组元素都除以2

#print(t5/0)#使每个数组元素都除以0,nan是不是一个数的意思,inf是无限的意思

#数组与数组的计算
#数组维度相同时
t6=np.arange(100,124).reshape((4,6))
print(t6+t5)#对应位相加
print(t6*t5)#对应位进行相乘

#数组维度不同时(特定情况才可以计算)
#从末尾开始算起的维度,如果两个数组的轴长度相符或其中一方为1,则认为可以进行计算
t7=np.arange(0,6)#(1,6)
print(t5-t7)#t5每一行都按位减去t7

t8=np.arange(4).reshape((4,1))#(4,1)
print(t5-t8)#t5每一列都按位减去t8

5、常用统计函数

函数名功能
ndarray.sum(axis=None)求数组所有元素的和
ndarray.mean(axis=None)求数组所有元素的平均值
np.median(ndarray,axis=None)求数组的中值
ndarray.max(axis=None) 或np.max(ndarray)求数组中最大值
ndarray.min(axis=None)或np.min(ndarray)求数组中最小值
np.argmax(ndarray)求数组中最大值的索引
np.argmin(ndarray)求数组中最小值的索引
np.ptp(ndarray,axis=None)求数组的极值(即最大值最小值之差)
ndarray.std(axis=None)求数组的标准差(表现一组数据平均值分散程度的一种度量)

6、数组的切片与索引

#取行
print(t1[2])
#取连续的多行
print(t1[2:])
print(t1[1,:])#取第二行所有的数
print(t1[2:,:])#取从第三行开始的后面所有的行

#取不连续的多行
print(t1[[2,8,10]])#取第3,9,11行
print(t1[[2,10,3],:])

#取列
print(t1[:,0])
#取连续的多列
print(t1[:,2:])
#取不连续的多列
print(t1[:,[0,2]])#取第1,3列

#取行和列,取第三行和第四列的值
a=t1[2,3]
print(a)

#取多行多列,取第三行到第五行,第二列到第四列的结果
b=t1[2:5,1:4]
print(b)
#取多个不相邻的点
#选出来的结果是(0,0),(2,1),(2,3),第一个[]存储x坐标,第二个[]存储y坐标
c=t1[[0,2,2],[0,1,3]]
print(c)

7、Numpy中的copy和view(深复制与浅复制)

  • 浅复制:a=b[:],视图的操作,一种切片,会创建新对象a,但是a的数据完全由b保管,他们两个数据变化是一致的。
  • 深复制: a=b.copy()复制,a和b互不影响。

8、Numpy中数值的修改(赋值、布尔索引、三元运算式、裁剪)

#numpy中数值的修改#
#t1[:,2:4]=0
t2=np.arange(24).reshape((4,6))
#bool索引
print(t2<10)#输出的均为bool类型
t2[t2<10]=3#将t2中小于10的数全部修改为3
print(t2)

print(t2[t2>20])#显示t2中所有大于20的数

#numpy中的三元运算符
print(np.where(t2<=3,100,300))#将t2中小于等于3的替换成100,否则替换为300
#numpy中的clip(裁剪)
print(t2.clip(10,18))#小于10的替换为10,大于18的替换为你18

9、数组的拼接与拆分

t1=np.arange(12).reshape((2,6))
t2=np.array(range(12,24)).reshape((2,6))
print(np.hstack((t1,t2)))#水平拼接
# [[ 0  1  2  3  4  5 12 13 14 15 16 17]
#  [ 6  7  8  9 10 11 18 19 20 21 22 23]]
#将x按列拆分成2个数组,第二个参数表示拆分成几个数组
x=np.arange(16).reshape(4,4)
x_1=np.hsplit(x, 2)#按列对数组进行拆分
#将x按特定列进行拆分,示例在第二列和第三列进行拆分。第二个参数表示拆分的位置
x_2=np.hsplit(x,(2,3))
print(np.vstack((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]]
#vsplit():按行对数组进行拆分

10、数组的行列交换

t1[[0,1],:]=t1[[1,0],:]#交换第一行与第二行
t1[:,[0,1]]=t1[:,[1,0]]#交换第一列与第二列
print(t1)

11、文件读写

#存储文件
a=np.arange(12).reshape((3,4))
np.save('test.npy',a)
#读取文件
#csv文件,逗号分隔值文件,显示:表格状态。源文件:换行和逗号分隔行列的格式化文件,每一行的数据表示一条记录。由于csv便于展示,读取和写入,所以可以用csv文件存储和传输小型数据
#np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
us_file_path="./US_video_numbers.csv"
t1=np.loadtxt(us_file_path,delimiter=",",dtype="int")

12、numpy中的nan和inf

  • 当我们读取本地文件为float的时候,如果有缺失,就会出现nan或者做了一个不合适的计算时也会出现nan(比如无穷大减无穷大)
  • 当一个数字除以0时会出现无穷inf
  • numpy中nan的注意点:1、两个nan是不相等的
    2、np.nan!=np.nan为True
    3、利用以上特性,判断数据中nan的个数:np.count_nonzero(t!=t)
    4、判断一个数是否为nan并替换为0,t[np.isnan(t)]=0
    5、nan和任何值计算均为nan
    6、numpy中不能将nan替换成0,如果替换则均值会变小,所以一般是将nan替换成均值(中值)或者直接删除nan那一行
#将nan的值改为为均值
import numpy as np

def fill_ndarray(t1):
    for i in range(t1.shape[1]):#遍历列
        temp_col=t1[:,i]#当前的一列
        nan_num=np.count_nonzero(temp_col!=temp_col)#统计nan的个数
        if nan_num !=0:#不为0说明当前列中有nan
            temp_not_nan_col=temp_col[temp_col==temp_col]#当前一列不为nan的数组
            temp_col[np.isnan(temp_col)]=temp_not_nan_col.mean()#选中当前为nan的位置赋值为均值

    return t1

if __name__=='__main__':
    t1=np.arange(12).reshape((3,4)).astype("float")
    t1[1,2:]=np.nan
    print(t1)
    t1=fill_ndarray(t1)
    print(t1)

13.numpy中的random的应用

名称作用
np.random.random([size])返回随机的浮点数,在半开区间 [0.0, 1.0)
np.random.rand(d0, d1, …, dn)生成生成[0,1)之间随机浮点数
np.random.randn(d0, d1, …, dn)生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数
np.random.randint(low, high, size=(?,?))生成一个整数或N维整数数组,取数范围:若high不为None时, 取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
np.random.seed([seed])当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数

后续还会有矩阵,图形图像处理的补充

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值