【数据分析】之【Numpy】学习知识梳理

【数据分析】之【Numpy】学习知识梳理

一、dtype的用法

1. dtype 是用于描述数据类型的对象

2. 常见dtype类型

3. 用途

3.1 创建数据时可以指定dtype

3.2 可用于数据类型转换-->np.astype()

ini 复制代码
import numpy as np
a=np.arange(1,10)
b=a.astype('float32')
print(b)

3.3 dtype自定义数据类型

php 复制代码
import numpy as np
date=[('zhangsan',(90,100,99),18),
      ('lisi',(98,90,99),19),
      ('wangmazi',(97,102,77),17)]
#  1. dtype自定义数据类型
a=np.array(date,dtype={#用字典键值对的形式
    'names':['name','scores','age'],
    'formats':['U8','3int','int']
})
print(a)
#  2. 测试数组中存储日期数据类型
date2=['2006-03-21','2002-03-17','2025','2025-06-08T21:37:50']
b=np.array(date2)
print(b)
print('-'*50)
#用astype转换数据类型
b=b.astype('M8[s]')
print(b)
#两点注意:
#1. 日期中比如三月不能用3表示,要用03表示
#2. M8[*]中限制输出时,年月日为大写Y,M,D;时分秒为小写h,m,s
print('-'*50)

二、数组变维

1. 什么时候用数组变维?

·数据处理:例如将一维数据转换为二维矩阵,便于进行矩阵运算。 ·模型输入要求:机器学习模型通常要求输入特定形状的数组(如(batch_size, height, width, channels))。 ·内存效率:高维数组可以在不复制数据的情况下重新组织视图。

2. NumPy 数组变维的主要方法

2.1. reshape() 方法

功能:返回一个新的数组对象,具有指定的维度,原数组数据不变。 语法:array.reshape(shape) 或 np.reshape(array, shape)

2.2. 直接赋值修改 shape 属性(就地变维)

功能:直接改变原数组的形状(注意:数据布局不变,可能导致逻辑错误)。 语法:array.shape = new_shape。

2.3. ravel() 和 flatten():多维数组展平为一维

ravel():返回视图(不复制数据),修改会影响原数组。 flatten():返回副本(复制数据),修改不影响原数组。

2.4 上述方法示例代码

scss 复制代码
import numpy as np
#共享变维---改变d,c也会改变;改变c,d也会改变
c=np.arange(1,10)
print(c)
d=c.reshape(3,3)
print('共享变维',d)
print('-'*50)
#复制变维---数据之间相互独立---flatten
e=c.flatten()
print('复制变维',e)
print('-'*50)
#就地变维
#就地变维法一
e.shape=(3,3)
print('就地变维',e)
print('-'*50)
#就地变维法二
e.resize(9,)
print('就地变维方法二',e)

三、数组切片

1. 基本语法--和列表相似

arduino 复制代码
array[start:stop:step, start:stop:step, ...]  # 多维切片
  • start:起始索引(包含,默认 0)。
  • stop:结束索引(不包含,默认数组长度)。
  • step:步长(默认 1,负数表示反向)。

2. 代码示例

python 复制代码
import numpy as np
#数组切片
#数组对象[初始下标(包含):终止下标(不包含):步长]
#1. 初始下表省略默认为0,终止下标不写默认到数组结束,步长不写默认为1
#2. 初始、终止下标、步长为负数时,表示从后往前切
#3. 注意啊!!中间用:分隔
e=np.arange(1,10)
print('一维数组切片',e[0:6:1])
 
#多维数组切片
#eg:二维数组:数组对象[初始下标(包含):终止下标(不包含):步长 , 初始下标(包含):终止下标(不包含):步长]
#                       ->前半部分用来切行                   ->后半部分用来切列
#三维数组也一样   [***,***,***,]   ---> 第一部分用来切页,第二部分切行,第三部分切列
#               其中***就是这个结构:--> 初始下标(包含):终止下标(不包含):步长

:NumPy 切片返回原数组的视图,修改切片会影响原数组

四、数组的组合与拆分

1. 速查表

2.上述方法示例代码

ini 复制代码
import numpy as np
# h 表示水平;v 表示垂直,d 表示深度;stack 表示组合;split 表示拆分
a=np.arange(1,7).reshape(2,3)
b=np.arange(7,13).reshape(2,3)
print(a,'-->a')
print(b,'-->b')
#水平方向的操作
c=np.hstack((a,b))  #要注意!!hstack()函数中的参数是元组,要再带上括号
print(c,'-->c')
a,b=np.hsplit(c,2) #注意!!拆成几份就要用几个对应的参数来接收
print(a,'-->a')
print(b,'-->b')
#垂直方向的操作类似,将"h"换成"v"即可
 
#深度方向的操作
d=np.dstack((a,b))
print(d,'-->d')    #深度方向组合后得到的可能是从某一个角度看过去的多维数组的shape样子
e,f=np.dsplit(d,2)
print(e,'-->e')
print(f,'-->f')
 
#  代替上述所有的一个函数
#   通过axis作为关键字参数指定组合的方向 , 取值如下
#    0 : 垂直方向组合拆分
#    1 : 水平
#    2 : 深度  (深度只有三维数组能用)
#    concatenate表示组合
#    spilt表示拆分
h=np.concatenate((a,b),axis=1)
print(h,'-->h')
i,j=np.split(h,2,axis=1)
print(i,'-->i')
print(j,'-->j')
 
#长度不等的数组组合
a=np.array([1,2,3,4,5])
b=np.array([1,2,3,4])
 # 填充b数组使其长度与a相同,头部补充0个元素,尾部补充1个元素
b=np.pad(b,pad_width=(0,1),mode='constant',constant_values=0)
# mode='constant'这一句一般是固定的,意思为补充的是常量,constant_values=0表示要补充进去的值
print(b,'-->b')
c=np.vstack((a,b))
print(c,'-->c')
 
#简单的一维数组组合方案
a=np.arange(1,9)
b=np.arange(9,17)
#将两个数组摞在一起形成两行
c=np.row_stack((a,b))  # 注意!!里面的参数是元组
print(c,'-->c')
#将两个数组并在一起形成两列
c=np.column_stack((a,b))   #注意!没有column_split、row_split
print(c,'-->c')

五、掩码基础

1.掩码

用于根据条件筛选或操作数组元素。掩码本质上是一个布尔数组(True/False),用于标记需要处理的元素位置。

2.基础示例(后续学习之后再补充)

ini 复制代码
import numpy as np
 
#基于bool数组的掩码
a=np.arange(1,10)
mask=[True,False,True,False,True,False,True,False,True]
print(a[mask])
#eg: 输出100以内三的倍数
b=np.arange(1,100)
mask2=b%3==0
print(b[mask2])
 
#基于索引的掩码
names=np.array(['apple','vivo','oppo','xiaomi','huawei'])
mask3=[1,0,2,4,3]
print(names[mask3])

六、numpy的其他属性

见代码--后续持续补充

python 复制代码
#  shape -- 维度
#  dtype -- 元素类型
#  size -- 元素数量
#  ndim -- 维数
#  itemsize -- 元素字节数
#  nbytes -- 总字节数
#  real -- 复数数组的实部数组
#  imag -- 复数数组的虚部数组
#   T -- 数组对象的转置
#  flat -- 扁平迭代器(将高维数组抻平成一维数组)
import numpy as np
a=np.arange(1,10).reshape(3,3)
print(a,'-->a')
print([x for x in a.flat])

第一次写笔记,欢迎大家批评指正!!

相关推荐
小高求学之路11 天前
MinIO centos 7 离线(内网) 一键部署安装
python·centos·numpy
NLxxxxX11 天前
爬虫获取数据:selenium的应用
开发语言·爬虫·python·selenium·测试工具·numpy·pandas
沛沛老爹13 天前
NumPy玩转数据科学
人工智能·python·机器学习·numpy·数据科学·多维数组·python库
点云SLAM13 天前
PyTorch 中Tensor常用数据结构(int, list, numpy array等)互相转换和实战示例
数据结构·人工智能·pytorch·算法·list·numpy·tensor
搞IT的放牛娃14 天前
AI人工智能 —— Numpy
人工智能·numpy
摘取一颗天上星️19 天前
机器学习四剑客:Numpy、Pandas、PIL、Matplotlib 完全指南
机器学习·numpy·pandas
Ai财富密码19 天前
【Python教程】CentOS系统下Miniconda3安装与Python项目后台运行全攻略
开发语言·python·numpy
仟濹20 天前
「pandas 与 numpy」数据分析与处理全流程【数据分析全栈攻略:爬虫+处理+可视化+报告】
大数据·python·数据分析·numpy·pandas
心动啊12120 天前
Numpy7——数学2(矩阵基础(矩阵的逆和行列式),线性方程基础)
线性代数·矩阵·numpy