NumPy计算库学习

  • 科学计算库Numpy
    • 高效的运算工具,核心的数据结构是ndarray
  • 基本操作
    • ndarray.方法()
    • numpy.函数名()或np.函数名()
  • ndarray的运算
    • 逻辑运算
    • 统计运算
    • 数组间运算

💫什么是Numpy

num-numerical

py-python

数值计算的python库

它是一个由多维数组对象和用于处理数组的例程集合组成的库。(用于快速处理任意维度的数组)

支持常见的数组和矩阵操作

Numpy提供了一个N维数组类型,它描述了相同类型的"item"的集合

import numpy as np
score = np.array([[80, 89, 86, 67, 79],
                  [78, 97, 89, 67, 91],
                  [90, 34, 54, 55, 46],
                  [57, 86, 97, 66, 43],
                  [24, 53, 64, 21, 64]])

print(score)

💫基本操作

ndarray优势

简而言之,NumPy的优势在于计算,但是对于数据处理并不好,所以数据处理将会使用Panda

  1. 存储风格
    • ndarray-所有元素必须是相同类型-故通用性不强
    • list-可以是不同类型-故通用性很强
  • ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就使得批量操作数组元素时速度更快
  • 这是因为ndarray中的所有元素类型都是相同的,而python列表中的元素是任意的,所以ndarray在存储元素的时候内存可以连续,而python原生list就只能通过寻址方法找到下一个元素
  1. 并行化运算
    • ndarray支持向量化运算
  2. 底层语言
    • numpy底层使用c语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制

🐣🐣ndarray属性

属性
ndarray.shape数组维度的元组
.size数组中的元素数量
.ndim数组维数
ndarray.dtype数组元素的类型
.itemsize一个数组元素的长度(字节)
 (2,3)二维
 (4,)一维
 (2,2,3)三维

形状的修改

  • ndarray.reshape((10,8))
    • 这个只是对原数据进行了重新分割,并没有转置(行列转换)
    • 返回了新的adarray,原始数据不修改
  • ndarray.resize()
    • 修改效果跟reshape一样
    • 没有返回值,只会对原数据修改
  • ndarray.T()
    • 真正的数组转置
    • 返回新的adarray

类型的修改

  • ndarray.astype("type")
    • 可转换为任意类型
  • ndarray.toString()
    • 转换成bytes序列化到本地

创建数组时指定类型

在数组后逗号写比如,dtype=np.float32或者,dtype="float32"

🐣🐣生成数组的方法

  1. 生成0和1的数组
  2. 从现有数组中生成
  3. 生成固定范围的数组
  4. 生成随机数组

1.生成0和1的数组

目的主要是为了生成空数组

方法:

  1. np.zeros(shape),生成0
  2. np.ones(shape),生成1
  • 形状既可用元组表达(),也可用列表[]

2.从现有数组中生成

  • np.array(),深拷贝(原数组改变,拷贝数组不变)
  • np.copy(),深拷贝
  • np.asarray(),浅拷贝(原数组改变,拷贝数组也变)

3.生成固定范围的数组

  • np.linspace(左,右,生成个数),左闭右也闭,等距离(相除,每个数等距离)
  • np.arange(左,右,步长),左闭右开

4.生成随机数组

重点在于确定它的分布状况

np.random模块

  • 均匀分布(每组可能性相等)
    • np.random.uniform(low=0.0,high=1.0,size=100)
      • 左闭右开
      • 左默认值为0,右默认值为1(均为float类型)
      • size:输出样本数目,为int或元组(tuple)类型
      • 返回值ndarray类型
  • 正态分布
    • np.random.normal(loc=0.0,scale=1.0,size=None)
      • loc为均值,也就是对称轴(float)
      • scale为标准差,标准差越小越瘦高(float)
      • size形状

案例:数组的索引和切片

随机生成8只股票10日的交易日涨幅数据

import numpy as np
#创建
stock_change=np.random.normal(loc=0.0,scale=1,size=(8,10))
#获取第一个股票的前三日的涨幅数据
print(stock_change[0,0:3])#如果切片开头是0,可以省略冒号前的0

数组的去重

  • ndarray.unique() np.unique()
  • 去重还有一个方法是 set() ,但是只能用于一维数组,如果是多维就想用set,就需要先转成一维,再set
    • set(temp.flatten()),得到的是集合

💫ndarray运算

🐣🐣逻辑运算

操作符合某一条件的数据

  1. 运算符
import numpy as np
#创建
stock_change=np.random.normal(loc=0.0,scale=1,size=(8,10))
print(stock_change)
#逻辑运算
print(stock_change>0.5)#返回布尔数据

print(stock_change[stock_change>0.5])#通过布尔索引返回符合要求的数

stock_change[stock_change>0.5]=1.1
print(stock_change) #把原数据符合条件的值都修改为1.1
  1. 通用判断函数

返回值都是布尔类型

  • np.all()

需要在范围内的所有数据都符合

#是否这部分股票全为上涨
print(np.all(stock_change[0:2,0:5]>0))
  • np.any()

只要在范围内有数据符合即可

print(np.any(stock_change[0:2, :]>0))
  1. 三元运算符
  • np.where(布尔值,Ture位置的值,False位置的值)
#判断前四个股票前四天的涨跌幅,大于0的置为1,否则为0
temp=stock_change[:4,:4]
print(temp)
print(np.where(temp>0,1,0))
  • 复合逻辑需要结合 np.logical_and np.logical_or使用
# 判断前四个股票前四天的涨跌幅,大于0.5并且小于1的置为1,否则为0
print(np.where(np.logical_and(temp>0.5,temp<1),1,0))

🐣🐣统计运算

如果想要知道涨幅最大或跌幅最大的数据

  1. 统计指标函数
    • np.min、max、mean(平均值)、median(中位数)、var(方差)、std(标准差)
  2. 返回最大值、最小值所在位置(索引返回过来)
    • np.argmax、argmin

🐣🐣数组间运算

1.数组与数的运算

对数组直接运算,其会作用到数组里的每一个元素

arr=np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(arr+2)

2.数组与数组的运算

前提是两数组形状必须相同

22.Broadcast广播机制

为了不同形状的ndarray进行运算

当操作两个数时,numpy会逐个比较它们的shape,只有在下面这个情况下,两个数组才能进行数组与数组的运算

  • 维度相同
  • shape(其中有对应的位置,两者至少1个为1)

最终形状取每个维度最大的

matrix矩阵运算

必须是二维的

矩阵一定是二维数组,但二维数组不一定是矩阵

1. 存储矩阵:

  • np.mat() ,将数组转换成矩阵
  • np.array,还是数组

1. 矩阵乘法运算:

矩阵乘法有两个关键:

  • 形状改变 (m,n)x(n,l)
  • 运算规则 (m,n)x(n,l)=(m,l)
    计算:
  1. 如果用的是np.array来存储矩阵的,用这两种方法计算:
    • np.matmul
    • np.dot
  2. 如果用的是np.mat()来存储矩阵的
    • 直接数组名_mat * 数组名_mat
    • 或者数组名 @ 数组名

💫合并、分割

合并

  • 水平合并
    • np.hstack(())
  • 竖直合并
    • np.vstack(())
  • axis()轴
    • np.concatenate((),axis=0)
    • 0是竖直,1是水平

分割

  • np.arange(x,n),n代表被分成n个
  • np.split(x,[a,b,c...]),传一个列表,列表里abc代表分割处的索引值

💫IO操作和数据处理

目标: 知道NumPy文件的读取

因为 大多数数据并不是我们自己构造的,而是存在于文件当中,需要我们用工具获取

但是其实NumPy并不适合用来读取和处理数据,因此我们这里了解相关API,以及NumPy不方便的地方即可

NumPy读取

读取数据

但是np会有很多无法读取出来(比如字符串),所以不用这个

test=np.genfromtxt("test.csv",delimiter=',')
#传的分别是文件路径和分隔符

如何处理缺失值

nan缺失值是一个浮点型

  1. 样本数据足够大时,可 直接删除 含有缺失值的样本
  2. 样本较少时,用替换(插补)法
    • 也就是算出这一列的平均值,填到nan缺失值处

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值