numpy学习

numpy学习

什么是numpy?

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

优点:

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

利用numpy创建数组(矩阵)

import random
import numpy as np

# 创建一个指定的一维数组
t1 = np.array([1, 2, 3, ])
print(t1)
print(type(t1))

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

# 传入的参数跟range函数类似,生成相应可迭代对象传入
t3 = np.arange(4, 10, 2)
print(t3)
print(type(t3))

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

t5 = np.array([5, 1, 0, 1, 0, 1], dtype=bool)
print(t5)
print(t5.dtype)

# 将数组中的数据类型改变
t6 = t5.astype("int64")
print(t6)
print(t6.dtype)

t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

# 保留数组中数据两位小数
t8 = np.round(t7, 2)
print(t8)

数组的形状

import numpy as np

t1 = np.arange(12)
print(t1)
print(t1.shape)

t2 = np.array([[1, 2, 3], [4, 5, 6]])
print(t2)
print(t2.shape)

t3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(t3)
print(t3.shape)

t4 = np.arange(12)
t5 = t4.reshape((3, 2, 2))
print(t5)

# 将数组拉成一维
t6 = t5.flatten()
print(t6)

数组计算

import numpy as np

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

print(t2 + 2)

print(t2 * 2)

print(t2 / 2)

t3 = np.arange(100, 124).reshape((4, 6))
print(t3)

# 对应位置的数进行相加
print(t3 + t2)
# 对应位置的数进行相乘
print(t2 * t3)

t4 = np.array([0, 1, 2, 3, 4, 5])
# 将t2中的每一行与t4相减
print(t2 - t4)

轴(axis)

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

有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值

numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件

显示:表格状态

源文件:换行和逗号分隔行列的格式化文件,每一行的数据表示一条记录

由于csv便于展示,读取和写入,所有很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的。

np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

参数解释
frame文件、字符串或产生器,可以是.gz或bz2压缩文件
dtype数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认np.float
delimiter分隔字符串,默认是任何空格,改为逗号
skiprows跳过前x行,一般跳过第一行表头
usecols读取指定的列,索引,元组类型
unpack如果True,读入属性将分别写入不同数组变量,False读入数据只写入一个数组变量,默认False
import numpy as np

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

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

在这里插入图片描述

numpy中的转置

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

import numpy as np

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

t2 = t1.transpose()
print(t2)

t3 = t1.T
print(t3)

t4 = t1.swapaxes(1, 0)
print(t4)

三种方法都可以。

numpy读取和存储数据

numpy索引和切片

import numpy as np

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

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

# 取行
print(t1[2])
print("*" * 100)
# 取连续的多行
print(t1[2:])
print("*" * 100)
# 取不连续的多行(第3,9,11行)
print(t1[[2, 8, 10]])
print("*" * 100)
# 取列
print(t1[1, :])  # 取第一行所有的
print(t1[1, ::-1])  # 取第一行所有的,并倒序
print(t1[1, 0:1])  # 取第一行第一个元素
print(t1[:, 0])  # 取所有行的第一个元素
print("*" * 100)
# 取连续的多列
print(t1[:, 1:3])  # 取所有行的第2,3列所有元素
print("*" * 100)
# 取不连续的多列
print(t1[:, [0, 2, 3]])
print("*" * 100)
# 取多行多列
print(t1[2, 3])  # 取第3行第4列
print(t1[2:5, 1:4])  # 取第3行到第5行,第2列到第4列的元素
print("*" * 100)
# 取不相邻的点
print(t1[[0, 2], [0, 1]])  # 取(0,0)点和(2,1)点
print("*" * 100)

numpy更多的索引方式

numpy中布尔索引
t1 = np.arange(24).reshape((4, 6))
print(t1)

# 取t1中比10小的元素
print(t1 < 10)

# 把t1中比10小的元素赋值为3
t1[t1 < 10] = 3
print(t1)
numpy中三元运算符
t1 = np.arange(24).reshape((4, 6))
print(t1)

# 把t1中小于10的元素赋值为0,大于10的元素赋值为10
t2 = np.where(t1 < 10, 0, 10)
print(t2)
numpy中的clip(裁剪)
t1 = np.arange(24).reshape((4, 6))
print(t1)

# 把小于10的付赋值为10,大于18的赋值为18
t2 = t1.clip(10, 18)
print(t2)

numpy中的nan和lnf

nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan:

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan

当做了一个不合适的计算机的计算的时候(比如无穷大(inf)减去无穷大)

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

什么时候会出现inf包括(-inf,+inf)

比如一个数字除以0,(python中会直接报错,numpy中是一个inf或者-inf)

import numpy as np

print(np.nan == np.nan)

t1 = np.array([1., 2., np.nan])
print(t1)

print(t1 != t1)

# 可以用来统计nan个数
a = np.count_nonzero(t1 != t1)
print(a)

print(np.isnan(t1))
b = np.count_nonzero(np.isnan(t1))
print(b)

numpy中常用统计函数

求和:t.sum(axis=None)

均值:t.mean(a,axis=None)

中值:np.median(t,axis=None)

最大值:t.max(axis=None)

最小值:t.min(axis=None)

极值:np.ptp(t,axis=None)即最大值和最小值的差

标准值:t.std(axis=None)
在这里插入图片描述

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

数组的拼接

竖立拼接:

np.vstack((t1,t2))

水平拼接:

np.hstack((t1,t2))

数组的行列交换

t[[1,2],:]=t[[2,1]:] 行交换

t[:,[0,2]]=t[:,[2,0]] 列交换

numpy更多好用的方法

获得最大值最小值的位置

np.argmax(t,axis=0)

np.argmin(t,axis=1)

创建对角线为1的正方形数组(方阵):np.eye(3)

numpy生成随机数

参数解释
.rand(d0,d1,…,dn)创建d0-dn维度的均匀分布的随机数数组,浮点数,范围从0-1
.randn(d0,d1,…,dn)创建d0-dn维度的标准正态分布随机数,浮点数,平均数0,标准差1
.randint(low,high,(shape))从给定上下限范围选取随机数整数,范围是low,high结束值,size形状
.uniform(low,high,(size))产生具有均匀分布的数组,low起始值,high结束值,size形状
.normal(loc,scale,(size))从指定正态分布中随机抽取样本,分布中心是loc(概率分布的均值),标准差是scale,形状是size
.seed(s)随机数种子,s是给定的种子值,因为计算机生成的是伪随机数,所以通过设定相同的随机数种子,可以生成相同的随机数。

在这里插入图片描述

import numpy as np

t1 = np.random.randint(10, 20, (4, 5))
print(t1)

np.random.seed(10)
t2 = np.random.randint(0, 20, (3, 4))
print(t2)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值