数据科学库——numpy

本文详细介绍了numpy库在Python中的重要性,包括如何创建和操作数组、数据类型、数组形状、计算、转置、索引、切片、数值修改等基础知识,并深入探讨了广播机制、轴的概念、常用方法如读取数据、数组拼接、行列交换等。此外,还讲解了numpy中的特殊值nan和inf的处理,以及随机数生成和统计方法。通过实例解析,帮助读者全面理解并熟练运用numpy进行科学计算。

为什么要学习numpy

numpy非常快速和方便,也是科学计算的基础库

什么是numpy

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

numpy基础

numpy创建数组(矩阵)

三种方法使用numpy生成数组

import numpy as np
a=np.array([1,2,3,4,5])
print(a)
print(type(a))
b=np.array(range(1,6))
print(b)
print(type(b))
c=np.arange(1,6)
print(c)
print(type(c))
#以上三种 a b c 内容相同

在这里插入图片描述

numpy中常见的更多数据类型

在这里插入图片描述
数据类型的操作

#numpy中指定数据类型
d=np.array(range(1,6),dtype="i1")
print(d)
print(d.dtype)
print("*"*100)

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

#调整数据类型
e1=e.astype("int8")
print(e1)
print(e1.dtype)
print("*"*100)

#numpy中的小数
f=np.array([random.random() for i in range(10)])
print(f)
print(f.dtype)
#保留2位小数
f1=np.round(f,2)
print(f1)

在这里插入图片描述

numpy中数组的形状

查看数组的形状,使用shape方法
修改数组的形状,使用reshape方法

t1=np.arange(12)
print(t1)
print(50*"*")
print(t1.reshape(3,4))
print(50*"*")
t2=np.arange(24)
print(t2.reshape(2,3,4))
print(50*"*")
print(t2.reshape(4,6))

在这里插入图片描述

使用flatten()的方法可以进行展开:

print(t2.flatten())

在这里插入图片描述

numpy中数组的计算

数组和数的计算

当数组和数进行计算的时候,就是跟数组中每个数字进行操作,例如:t2+2,就是t2中每个数字都+2.
这属于广播机制

数组和数组的计算

当俩个数组的形状是一样的时候:对应位置的数字进行计算
2维数组中,当俩个数组形状不同(行数一样或者列数一样)的时候:对应维度位置数字进行计算。

t1=np.arange(0,6)
print(t1)
t2=np.arange(24).reshape(4,6)

print(t2)
print(50*"*")
print(t2-t1)

在这里插入图片描述
在这里插入图片描述
三维数组从后往前看,形状有一致的可以计算。
例如:
shape(3,3,3)和shape(3,2)是不能计算的
shape(3,3,2)和shape(3,2)是能计算的

轴(axis)

在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2, 3)),有0,1,2轴

在这里插入图片描述

在这里插入图片描述

numpy常用方法

numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
在这里插入图片描述

path="文件路径"
t1=np.loadtxt(path,delimiter=",",dtype="int",unpack=True)

delimiter:指定的边界符号(csv中是逗号)
dtype:默认情况下,较大数据会使用科学计数法
unpack:默认为False,有多少数据就会有多少行,当为True的时候,每一列的数据会形成一行(相当于转置的效果)

numpy中的转置

转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据

#二维数组实现转置以下三种方法均可
t1.transpose()
#转置和交换轴的效果是一样的
t1.swapaxes(1,0)
t1.T

numpy索引和切片

import numpy as np
t1=np.arange(24).reshape(4,6)
print(t1)

print(50*"*")
#取第三行
print(t1[2])
print(50*"*")

#取多行
print(t1[2:])
print(50*"*")

#取不连续的多行
print(t1[[0,2,3]])

#通用的写法 t1[行,列]
#print(t1[1,:])或者t1[2:,:]

#取列
print(50*"=")
print(t1[:,0])

#取连续的多列
print(50*"=")
print(t1[:,2:])

#取不连续的多列
print(50*"=")
print(t1[:,[0,2,3]])

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

#取多行多列  取第二行到第四行 第四列到第六列
print(50*"=")
print(t1[1:4,3:6])

#取多个不相邻的点
print(50*"=")
print(t1[[0,2],[0,1]])

在这里插入图片描述

numpy中数值的修改

import numpy as np
t1=np.arange(24).reshape(4,6)
print(t1)
print("========")
#布尔索引
print(t1<10)
#小于10的值全部给0
t1[t1<10]=0
print("========")
print(t1)
print("========")
#打印出所有大于20的数
print(t1[t1>20])

在这里插入图片描述

numpy中三目运算符

#小于10 的数全部取0,大于10的数全部取10
print(np.where(t1<10,0,10))

在这里插入图片描述

numpy中的裁剪(clip)

#小于10的全部取10,大于10的全部取18
print(t1.clip(10,18))

在这里插入图片描述

numpy中的nan和inf

什么时候numpy中会出现nan:
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf,+inf)
比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)

numpy中的nan的注意点

在这里插入图片描述

numpy中数组的拼接

#竖直拼接(t1在上,t2在下)
np.vstack(t1,t2)
#水平拼接(t1在左,t2在右)
np.hstack(t1,t2)
在这里插入代码片

numpy中数组的行列交换

import numpy as np
t1=np.arange(24).reshape(4,6)
print(t1)
print("========")
#第二行和第三行交换
t1[[1,2],:]=t1[[2,1],:]
print(t1)
print("========")
#第二列和第三列交换
t1[:,[1,2]]=t1[:,[2,1]]
print(t1)

在这里插入图片描述

numpy生成随机数

在这里插入图片描述

numpy中更多好用的方法

获取最大值最小值的位置
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常用统计方法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z小超爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值