机器学习之numpy库

机器学习之numpy库

  • numpy库概述
  • numpy库历史
  • numpy的核心
  • numpy基础
    • ndarray数组
    • 内存中的ndarray对象
    • ndarray数组对象的特点
    • ndarray数组对象的创建
    • ndarray对象属性的基本操作
      • 数组的维度
      • 元素的类型
      • 数组元素的个数
      • 数组元素索引(下标)
    • ndarray对象数组的自定义类型
    • 切片操作
      • 一维数组切片
      • 多维数组切片
      • ndarray数组的掩码操作
    • 多维数组的组合和拆分
      • 简单案例

numpy库概述

  1. Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。
  2. Numpy是其它数据分析及机器学习库的底层库。
  3. Numpy完全标准C语言实现,运行效率充分优化。
  4. Numpy开源免费。

numpy库历史

  1. 1995年,Numeric,Python语言数值计算扩充。
  2. 2001年,Scipy->Numarray,多维数组运算。
  3. 2005年,Numeric+Numarray->Numpy。
  4. 2006年,Numpy脱离Scipy成为独立的项目。

numpy的核心

numpy的核心:多维数组

  1. 代码简洁:减少Python代码中的循环。
  2. 底层实现:厚内核©+薄接口(Python),保证性能。

numpy基础

ndarray数组

用ndarray类的对象表示n维数组

import numpy as nparr= np.ndarray([1, 2, 3 ,4])
print(type(arr))

内存中的ndarray对象

元数据 : metadata
存储对目标数组的描述信息,如:dim count、dimensions、dtype、data等。

实际数据
完整的数组数据
将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能。

ndarray数组对象的特点

  1. Numpy数组是同质数组,即所有元素的数据类型必须相同
  2. Numpy数组的下标从0开始,最后一个元素的下标为数组长度减1

ndarray数组对象的创建

np.array(任何可被解释为Numpy数组的逻辑结构)
np.arange(起始值(0),终止值,步长(1))
np.zeros(数组元素个数, dtype=‘类型’)
np.ones(数组元素个数, dtype=‘类型’)

#方式一:直接创建
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
print(a)# 方式二:np.arange(起始值,终止值,步长)
b = np.arange(0, 8, 2)
print(b);#方式三: np.zeros(数据个数,dtype = '数组类型')
c = np.zeros(5, dtype = "int")
print(c)#方式四:np.ones(数据个数, dtype = '数组类型')
d = np.ones(5, dtype = 'int')
print(d)

ndarray对象属性的基本操作

数组的维度

数组的维度: np,ndarray.shape

e = np.array([[1,2,3,4],[5,6,7,8]])
print(type(e), e.shape)

在这里插入图片描述

元素的类型

import numpy as np
ary = np.array([[1,2,3,4],[5,6,7,8]
])
#观察维度,size,len的区别
print(ary.shape, ary.size, len(ary))

在这里插入图片描述

数组元素的个数

ary1 = np.array([[1,2,3,4],[5,6,7,8]
])
#观察维度,size,len的区别
print(ary1.shape, ary1.size, len(ary1))

在这里插入图片描述

数组元素索引(下标)

import numpy as np
a = np.array([[[1, 2],[3, 4]],[[5, 6],[7, 8]]])
print(a, a.shape)
print(a[0])
print(a[0][0])
print(a[0][0][0])
print(a[0, 0, 0])
for i in range(a.shape[0]):for j in range(a.shape[1]):for k in range(a.shape[2]):print(a[i, j, k])

ndarray对象数组的自定义类型

自定义类型(dtype)有很多方式,这里介绍简单介绍几种方式
方式一:

import numpy as npdata=[('zs', [90, 80, 85], 15),('ls', [92, 81, 83], 16),('ww', [95, 85, 95], 15)
]a = np.array(data, dtype='U3, 3int32, int32')
#a = np.array(data, dtype='U3, 3int32, int32')
print(a)
print(a[0], ":", a[0]['f0'], ":", a[0]['f1'], ":", a[0]['f2'])

在这里插入图片描述

方式二:

#方法二:c = np.array(data, dtype={'names': ['name', 'scores', 'ages'],'formats': ['U3', '3int32', 'int32']})
print(c[0]['name'], ":", c[0]['scores'], ":", c[0]['ages'])

在这里插入图片描述

切片操作

一维数组切片

#数组对象切片的参数设置与列表切面参数类似
#  步长+:默认切从首到尾
#  步长-:默认切从尾到首
#数组对象[起始位置:终止位置:步长, ...]
#默认位置步长:1
import numpy as npa = np.arange(1, 10)
print(a)  # 1 2 3 4 5 6 7 8 9
print(a[:3])  # 1 2 3
print(a[3:6])   # 4 5 6
print(a[6:])  # 7 8 9
print(a[::-1])  # 9 8 7 6 5 4 3 2 1
print(a[:-4:-1])  # 9 8 7
print(a[-4:-7:-1])  # 6 5 4
print(a[-7::-1])  # 3 2 1
print(a[::])  # 1 2 3 4 5 6 7 8 9
print(a[:])  # 1 2 3 4 5 6 7 8 9
print(a[::3])  # 1 4 7
print(a[1::3])  # 2 5 8
print(a[2::3])  # 3 6 9

这是对一维数组进行切片操作,当然这里要特别注意下,省略参数的地方,
以及如果指明了起点位置以及终点位置,答案是不包括起点位置的,但是包括终点位置

多维数组切片

二维数组切片跟一维数组切片比较类似
二维数组切边,先对行进行切片,然后在对列进行切片,行和列的切片之间用逗号来隔开
这里介绍三维数组切片的案例

mport numpy as np
a = np.arange(1, 28)
a.resize(3,3,3) #变成三维的3页3行3列
print(a)
#切出1页 
print(a[1, :, :])		
#切出所有页的1行
print(a[:, 1, :])		
#切出0页的1行1列
print(a[0, :, 1])

ndarray数组的掩码操作

为true的正常输出,为false的不输出

import numpy as np
a = np.arange(0, 10)
mask = [True, False,True, False,True, False,True, False,True, False]
print(a[mask])

多维数组的组合和拆分

组合和拆分分成三个方向,垂直方向,水平方向,深度方向

垂直方向
reshape–>如果是二维数组(指定变成几行几列)
垂直方向组合函数, vstack
垂直方向拆分函数,vsplit

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
# 垂直方向完成拆分操作,生成两个数组
d, e = np.vsplit(c, 2)

水平方向
拆分函数 : hsplit
组合函数:hstack

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 水平方向完成组合操作,生成新数组 
c = np.hstack((a, b))
# 水平方向完成拆分操作,生成两个数组
d, e = np.hsplit(c, 2)

深度方向操作
拆分函数: dsplit
组合函数:dstack
注意 : 进行深度方向操作的,ndarray数组必须至少是三维的

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 深度方向(3维)完成组合操作,生成新数组
i = np.dstack((a, b))
# 深度方向(3维)完成拆分操作,生成两个数组
k, l = np.dsplit(i, 2)

拆分和组合三个方向,通用的函数

# 通过axis作为关键字参数指定组合的方向,取值如下:
# 若待组合的数组都是二维数组:
#	0: 垂直方向组合
#	1: 水平方向组合
# 若待组合的数组都是三维数组:
#	0: 垂直方向组合
#	1: 水平方向组合
#	2: 深度方向组合
np.concatenate((a, b), axis=0)
# 通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上
np.split(c, 2, axis=0)

简单案例

长度不等的数组进行组合

import numpy as np
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=-1)
print(b)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
print(c)

简单的一维数组组合方案

a = np.arange(1,9)		#[1, 2, 3, 4, 5, 6, 7, 8]
b = np.arange(9,17)		#[9,10,11,12,13,14,15,16]
#把两个数组摞在一起成两行
c = np.row_stack((a, b))
print(c)
#把两个数组组合在一起成两列
d = np.column_stack((a, b))
print(d)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【趣味游戏-08】20240123点兵点将点到谁就是谁(列表倒置reverse)

背景需求: 上个月,看到大4班一个孩子在玩“点兵点将点到谁就是谁”的小游戏,他在桌上摆放两排奥特曼卡片,然后点着数“点兵点将点到谁就是谁”,第10次点击的卡片,拿起来与同伴的卡片进行交换。他是从第一排…

npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED

npm install时报错code CERT_HAS_EXPIRED 一、报错情况二、解决方案 一、报错情况 一直用的好好的,突然今天发现npm install 出问题了,具体报错如下: npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to…

unity项目《样板间展示》开发:火焰和UI设计

第二章:火焰和UI设计 前言一、火焰模型管理灶台火焰壁炉火焰 二、电视机播放三、UI设计结语 前言 这次带大家从0到1做一个unity项目:《样板间展示》。 顾名思义,项目内容是展示样板间,即玩家可以与房间中的物体、家具进行交互。 至…

30天零售应用构建挑战:低代码平台的惊人潜力

随着零售业格局的不断演变,零售商正被迫在一个日益活跃、竞争日益激烈的客户驱动型市场中展开竞争。随着互联网上产品信息和评论的出现,消费者的态度发生了巨大的变化——购物者不再依赖销售人员来获取信息。他们现在知道的和许多零售销售人员一样多&…

Portainer Docker容器可视化管理平台实践

Portainer Docker容器可视化管理平台实践 引安装登录Remote ENV 实践 引 平常用docker命令操作比较多,找了一款docker可视化工具,方便快速预览和批量操作,不想一行一行敲的时候,可以偷偷懒。Portainer试用了一下,安装…

linux的安装配置

文章目录 1.centos7安装2.如何进行一个网络的开启3.客户端Xshell和Xftp的一个使用4.换源 1.centos7安装 1.我是在虚拟机里面重装了一个liunx系统,首先我们新建一个虚拟机 2.前面东西都不需要我们进行一个选择,到图中的这一步我们选择一个liunx,版本的话我们选择一个…

网络防御保护1

网络防御保护 第一章 网络安全概述 网络安全(Cyber Security)是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断 随着数…

Midjourney基础 | 使用流程 注册,基础文生图,图的放大微调,保存

文章目录 1 使用流程2 生成自己的第一张图3 图的放大,微调3.1 放大3.2 微调变化 4 图的保存 Midjourney是依托于Discord的,但我也是通过Midjourney才了解的Discord 维基百科说~~Discord是一款专为社群设计的免费网络实时通话,主要针对游戏玩家…

请你来了解一下Mysql-InnoDB中事务的两段式提交

欢迎订阅专栏,了解更多Mysql的硬核知识点,原创不易,求打赏 ACID:事务的四个特性 A:原子性 原子性表示把一个事务中所有的操作视为一个整体,要么全部成功,要么全部失败,是事务模型区…

Flink处理函数(2)—— 按键分区处理函数

按键分区处理函数(KeyedProcessFunction):先进行分区,然后定义处理操作 1.定时器(Timer)和定时服务(TimerService) 定时器(timers)是处理函数中进行时间相关…

LeetCode_11_中等_盛最多水的容器

文章目录 1. 题目2. 思路及代码实现(Python)2.1 双指针 1. 题目 给定一个长度为 n n n 的整数数组 h e i g h t height height 。有 n n n 条垂线,第 i i i 条线的两个端点是 ( i , 0 ) (i, 0) (i,0) 和 ( i , h e i g h t [ i ] ) (i…

联想M7268、7208打印机加粉清零方法

联想小新M7268激光一体机基本参数 产品类型 黑白激光多功能商用一体机 涵盖功能 打印/复印/扫描 最大处理幅面 A4 耗材类型 鼓粉分离 耗材容量 硒鼓LD2268:10000页,墨粉LT2268:1000页 双面功能 手…

Linux常用的管线命令(pipe)

只介绍命令和对应的功能,详细用法可针对性的自行搜索 管线命令基本上都是对文本进行截取的功能,据我观察,他们基本上会以行为单位。 以下命令都可以用在管道上,但是有些也可以单独使用。 以下演示的文件是用last | head -n 12 >…

你知道Mysql的架构吗?

msyql分为server曾和存储引擎层 server层包括了连接器(管理连接,权限验证)、查询缓存(命中直接返回结果)、分析器(词法分析,语法分析)、优化器(执行计划生成,索引选择)、…

java.lang.IllegalArgumentException: When allowCredentials is true

1.遇到的错误 java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a…

vue echarts地图

下载地图文件: DataV.GeoAtlas地理小工具系列 范围选择器右侧行政区划范围中输入需要选择的省份或地市,选择自己想要的数据格式,这里选择了geojson格式,点右侧的蓝色按钮复制到浏览器地址栏中,打开的geojson文件内容…

gRPC-gateway使用介绍

gRPC-gateway 参考资料:gRPC-Gateway使用指南 服务中,使用了gRPC gateway(代理)来将外部的http请求映射为内部rpc调用。 proto文件示例: // 导入google/api/annotations.proto import "google/api/annotations…

Oracle 19c rac集群管理 -------- 集群启停操作过程

Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …

Android Dialog 显示不全的问题

前言:开发的时候发现一些运行到手机里的dialog显示不全,只显示一半左右 问了下chatgpt发现没有任何头绪,于是开始自己慢慢分析 显示去掉了原有的dialog的style发现问题解决了,但在原有基础上如何解决呢? 先看看xml&a…

MYSQL之索引语法与使用

索引分类 分类 含义 特点 关键字 主键索引 针对表中主键创建的索引 默认自动创建,只能有一个 PRIMARY 唯一索引 …