numpy


为什么要学numpy??

  • 快速
  • 方便
  • 科学计算的基础库

什么是numpy??

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

numpy数组基础

numpy创建数组(矩阵)

  1. 创建数组
  2. numpy中矩阵的类名
  3. numpy中数据的类型
  4. 指定类型的数组
  5. numpy 中的小数
创建数组

①通过array()创建数组

import numpy as np
# 使用numpy创建数组,得到ndarray的类型
t1 = np.array([1, 2, 3, ])
print(t1)  # [1 2 3]

②通过arange()创建数组

import numpy as np
t3 = np.arange(10)  # arange()的用法等于array(range()),是numpy所特有的
print(t3)  # [0 1 2 3 4 5 6 7 8 9]
print(type(t3))  # <class 'numpy.ndarray'>

注意:arange()是numpy中特有的方法,等于array(range())

import numpy as np
import random
t2 = np.array(range(10))
print(t2)  # [0 1 2 3 4 5 6 7 8 9]
print(type(t2))  # <class 'numpy.ndarray'>
numpy中矩阵的类名(numpy.ndarray)
t1 = np.array([1, 2, 3, ])
print(type(t1))  # <class 'numpy.ndarray'>
numpy中数据的类型 :dtype
# dtype 数据的类型
print(t3.dtype)  # int32

注意:dtype 后面没有括号,且当生成ndarray时,若元素类型不同,则每个元素的数据类型都会被转为相同的类型

import numpy as np
t1 = np.array([1, 2, 3, True, 2.5, 6.1,])
print(t1.dtype)
t2 = np.array([1, 2, 3, True])
print(t2.dtype)

for i in t2:
    print(type(i))

结果
在这里插入图片描述


补充
在这里插入图片描述

指定类型的数组

①创建指定类型的数组

# 指定创建的数组的数据类型
t4 = np.array(range(1, 4), dtype=float)  # dtype可以是类型
print(t4)  # [1. 2. 3.]
t5 = np.array([1, 1, 0, 1, 1, 0], dtype="bool")  # dtype也可以是字符串
print(t5)  # [ True  True False  True  True False]

创建指定类型的数组时,只需要在创建数组的时候,在后面加上 (dtype=类型)

②修改数组的数据类型:astype(dtype)

# 修改数组的数据类型
t6 = t5.astype("int8")
print(t6)  # [1 1 0 1 1 0]
print(t6.dtype)  # int8
numpy中的浮点数:random.random()

①创建浮点数数组

#随机生成10个浮点数的矩阵
t7 = np.array([random.random() for i in range(10)])
print(t7)   
print(t7.dtype) #float64

#生成3行4列的浮点数矩阵
t9 = np.random.random((3,4))
print(t9)

②设定浮点数位数
注意:原数组不变,且新数组遵循四舍五入的原则

# 修改浮点型的小数位数,四舍五入
t8 = np.round(t7,2) #round()取小数
print(t8)   #[0.99 0.5  0.52 0.54 0.47 0.16 0.61 0.43 0.32 0.45]

numpy的方法

数组的形状

①查看数组的形状:t.shape

注意:没有括号,shape后面没有括号

返回值解读:1.有几个数字就是几维,没有数字时是一维.
2.每个数字依次代表第 n,(n-1),(n-2)…1维的划分层次

import numpy as np

# 数组的形状
t0 = np.array(12)
print(t0.shape)  # ()

t1 = np.array(range(5))
print(t1.shape)  # (5,)

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], [1, 5, 9]]])
print(t3.shape)  # (2, 2, 3)  2块2行3列

''' 总结:
    获取数组t的形状:t.shape    
     !!!!没有括号,shape后面没有括号
    返回值解读:
        有几个数字就是几维,没有数字时是一维.
        每个数字依次代表第(n-1),(n-2)...1维的划分
'''

②修改数组的形状:t.reshape()
注意:该方法并没有改变原数组的形状

import numpy as np

# 改变数组的形状
t4 = np.arange(12)
print(t4.reshape((3, 4)))  # 3行4列
print(t4)  # t4并没有变化

'''总结:
    改变数组形状,调用方法reshape()
    注意:该方法并不会改变数组原有的形状
'''

# 误区
t5 = np.arange(24).reshape(2, 3, 4)
print(t5.shape)
# 一维
print(t5.reshape((24,)))
# 二维,1行24列
print(t5.reshape((1, 24)))
# 24行1列
print(t5.reshape((24, 1)))
'''
print(t5.reshape((24,))),print(t5.reshape((1,24)))
两者的区别是:后者比前者多了一个中括号
'''

③获取某数组的一维数组:

方式一:<不建议使用>t = t.()(t.shape[n-1]*t.shape[n-2]*…*t.shape[0])

方式二:t.flatten()

数组的计算

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

0表示行,1表示列
0表示行,1表示列

在这里插入图片描述0表示块,1表示行,2表示列

数组与数之间的运算

数组与数值进行运算时,只需要将数组中每一个数数值进行相应的运算即可
注意:在矩阵运算中,有时一些没有意义的运算,例如某个矩阵除以0,并不会出现计算不出来的结果在这里插入图片描述

数组之间的运算

①相同形状的数组间的计算
对应元素进行运算,计算后的数组形状和原数组相同
在这里插入图片描述

②二维数组与单行/列的数组进行运算

与单行进行运算
在这里插入图片描述与单列进行运算

在这里插入图片描述总结
一个n行m列形状的数组,与单行或单列的数组进行运算时,该数组必须满足 行=n 或 列=m ,否则会报错,且计算方式为每一行对应相运算或每一列相运算

数组的转置

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

实现转置:以t为例

方式一:transpose()

t = t.transpose())

方式二:T

t = t.T

方式三:swapaxes(1,0)

 t = t.swapaxes(1,0)

numpy读取数据

csv:Comma-Separated Value,逗号分隔值文件显示:表格状态

源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的
在这里插入图片描述

import numpy as np

us_file_path = "youtube_video_data/US_video_data_numbers.csv"

t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)

数据:
链接:https://pan.baidu.com/s/1cceU04a7iNty0sINRFAUeA
提取码:m7x1

❤️ numpy的索引和切片(重点)

①取值:

import numpy as np

us_file_path = "youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "youtube_video_data/GB_video_data_numbers.csv"

t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)

#numpy的索引和切片
#取某一行,第三行为例
print(t1[2])
#取连续的多行,第三行及其之后的每一行
print(t1[2:])
#取不连续的多行,1,3,7,8行为例
print(t1[[0,2,6,7],])

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

#取行和列,3行4列de值
print(t1[2,3])

#取多行多列,3-5行2-4列
b = t1[2:5,1:4] #注意前面是(列/行-1),后面是(行/列),左闭右开
print(b)

#取多个不相邻的点,例如(1,1)(3,2)(5,2)的值
c = t1[[0,2,4],[0,1,1]] #前面是 行-1,后面是 对应的列-1
print(c)

②修改值
1.比如我们想要把t中小于10的数字替换为3

t[t < 10] = 3
print(t)

2.如果我们想把t中小于10的数字替换为0,把大于20的替换为20,应该怎么做??
where()的用法

# (t本身没有变,所以修改要加一个赋值操作)
t = np.where(t<10,0,10)	#where的解释:t<10,if True,t=0;else t=10
print(t)

3.如果我们想将小于10的替换为10,大于18的替换为18
clip()的用法——剪裁操作

#(t本身没有变,所以修改要加一个赋值操作)
t = t.clip(10,18) #clip的解释:if t<10,t=10;if t>18,t=18
print(t)

numpy中关于数组的更多用法

1.获取最大值和最小值的位置:argmax()/argmin()
注意索引从0开始

0表示行,每行有3个值,返回值为对应的最大值或最小值的行
1表示列,每列有4个值,返回值为对应的最大值或最小值的列

t = np.array([[2,1,3],[8,9,4],[0,2,7],[1,6,2]])
print(t)
print(np.argmax(t,axis=0))#[1 1 2]每列最大值的索引,索引值为对应行
print(np.argmax(t,axis=1))#[2 1 2 1]每行最大值的索引
print(np.argmin(t,axis=0))#[2 0 3]每列最小值的索引
print(np.argmin(t,axis=1))#[1 2 0 0]每行最大值的索引

2.创建一个全为0的数组:zeros()

3行4列为例    #注意是浮点型
print(np.zeros((3, 4)))

3.创建一个全为1的数组:ones()

2行3列为例  #注意是浮点型
print(np.ones((2,3)))

4.创建一个对角线全为1,其余部分全为0的方阵 :eye()

#注意是浮点型
print(np.eye(3))

5.numpy生成随机数
在这里插入图片描述

numpy中的nan

1.nan是什么???
nan:not a number 表示不是一个数字

2.什么时候会出现nan?
①当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
②当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷天、一个数除以0)

补充:inf:infinity
inf 表示正无穷,-inf表示负无穷

3.如何指定一个nan或inf??

import numpy as np
a = np.nan
b = np.inf
numpy 在nan的注意点

1.两个nan是不相等的
在这里插入图片描述

2.np.nam != np.nan

在这里插入图片描述
3.利用两个nan不相等的性质,可以判断一个数组中nan的个数

np.count_nonzero(t!=t)

4.判断一个数字是否为nan

isnan(),返回值为bool型,通过此种方法,可以把nan进行一次性的替换

#例如,把数组t中所有的nan换成0
t[np.isnan(t)] = 0

5.nan和任何值的计算结果都为0


一般情况下,如果有数组缺失,且缺失值为nan,我们通常把缺失的值换为均值或中值,或者是直接删除有缺失值的一行

numpy中常用统计函数

  1. 求和:t.sum(axis=None)
  2. 均值:t.mean(a,axis=None)
  3. 中值:np.median(t,axis=None)
  4. 最大值:t.max(axis=None)
  5. 最小值:t.min(axis=None)
  6. 极值:np.ptp(t,axis=None)
  7. 标准差:t.std(axis=None)

标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值反映出数据的波动稳定情况,越大表示波动越大,约不稳定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值