机器学习-4

文章目录

  • 前言
    • 数组创建
    • 切片索引
      • 索引
      • 遍历
      • 切片
      • 编程练习
  • 总结


前言

本篇将介绍数据处理 Numpy 库的一些基本使用技巧,主要内容包括 Numpy 数组的创建、切片与索引、基本运算、堆叠等等。


数组创建

在 Python 中创建数组有许多的方法,这里我们使用 Numpy 中的arange方法快速的新建一个数组:

import numpy as np
a = np.arange(5)

其中import numpy as np是指引入Numpy这个库,并取别名为np。之所以取别名,是为了代码编写的方便。a=np.arange(5)是指将数值0 1 2 3 4赋值给a这个变量,这样我们就快速的创建了一个一维数组。

创建多维数组的方法是:

import numpy as np
b = np.array([np.arange(6),np.arange(6)])

这里,我们使用两个arange方法,创建了两个1x6的一维数组,然后使用numpy的array方法,将两个一维数组组合成一个2x6的二维数组。从而达到了创建多维数组的目的。

numpy创建的数组可以直接复制,具体代码示例如下:

import numpy as np
x = [y for y in range(6)]
b=np.array([x]*4)

该段代码会创建一个4*6的数组。

本关的任务是,补全右侧编辑器中 Begin-End 区间的代码,以实现创建一个m*n的多维数组的功能。具体要求如下:

函数接受两个参数,然后创建与之对应的的多维数组;

本关的测试样例参见下文。

本关设计的代码文件cnmda.py的代码框架如下:

引入numpy库

import numpy as np

定义cnmda函数

def cnmda(m,n):
    '''
    创建numpy数组
    参数:
         m:第一维的长度
         n: 第二维的长度
    返回值:
        ret: 一个numpy数组
    '''
    ret = 0
    
    # 请在此添加创建多维数组的代码并赋值给ret
    #********** Begin *********#
    ret = np.zeros((m, n))
    #********** End **********#
    
    return ret

切片索引

索引

ndarray的索引其实和python的list的索引极为相似。元素的索引从0开始。代码如下:

import numpy as np
a中有4个元素,那么这些元素的索引分别为0123
a = np.array([2, 15, 3, 7])
打印第2个元素
索引1表示的是a中的第2个元素
结果为15
print(a[1])
b是个23列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
打印b中的第1行
总共就2行,所以行的索引分别为01
结果为[1, 2, 3]
print(b[0])
打印b中的第2行第2列的元素
结果为5
print(b[1][1])

遍历

ndarray的遍历方式与python的list的遍历方式也极为相似,示例代码如下:

import numpy as np
a = np.array([2, 15, 3, 7])
使用for循环将a中的元素取出来后打印
for element in a:
    print(element)
根据索引遍历a中的元素并打印
for idx in range(len(a)):
    print(a[idx])
b是个23列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
将b展成一维数组后遍历并打印
for element in b.flat:
    print(element)
根据索引遍历b中的元素并打印
for i in range(len(b)):
    for j in range(len(b[0])):
        print(b[i][j])

切片

ndarray的切片方式与python的list的遍历方式也极为相似,对切片不熟的同学也不用慌,套路很简单,就是用索引。

假设想要将下图中紫色部分切片出来,就需要确定行的范围和列的范围。由于紫色部分行的范围是0到2,所以切片时行的索引范围是0:3(索引范围是左闭右开);又由于紫色部分列的范围也是0到2,所以切片时列的索引范围也是0:3(索引范围是左闭右开)。最后把行和列的索引范围整合起来就是0:3, 0:3。当然有时为了方便,0可以省略,也就是[:3, :3]。
在这里插入图片描述

切片示例代码如下:

import numpy as np
a中有4个元素,那么这些元素的索引分别为0123
a = np.array([2, 15, 3, 7])
'''
将索引从1开始到最后的所有元素切片出来并打印
结果为[15  3  7]
'''
print(a[1:])
'''
将从倒数第2个开始到最后的所有元素切片出来并打印
结果为[3  7]
'''
print(a[-2:])
'''
将所有元素倒序切片并打印
利用第三个参数修改索引步长,默认为1,设置-1为倒序
结果为[ 7  3 15  2]
'''
print(a[::-1])
b是个23列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
'''
将第2行的第2列到第3列的所有元素切片并打印
结果为[[5 6]]
'''
print(b[1:, 1:3])
'''
将第2列到第3列的所有元素切片并打印
结果为[[2 3]
      [5 6]]
'''
print(b[:, 1:3])

编程练习

平台会对你编写的代码进行测试。你只需按要求完成get_roi(data, x, y, w, h)函数即可。其中:

data:待提取ROI的原始图像数据(其实就是个二维数组),类型为ndarray;

x: ROI的左上角顶点的行索引,类型为int;

y: ROI的左上角顶点的列索引,类型为int;

w: ROI的宽,类型为int;

h: ROI的高,类型为int。

测试用例是一个字典,字典中image部分表示原始图像的像素数据,x部分表示ROI的左上角顶点的行索引,y部分表示ROI的左上角顶点的列索引,w部分表示ROI的宽,h部分表示ROI的高。

测试输入:
{‘image’:[[1, 2, 255, 255, 0], [255, 255, 0, 0, 3]], ‘x’:0, ‘y’:1, ‘w’:2, ‘h’:1}

预期输出:

[[ 2 255 255] [255 0 0]]

import numpy as np

def get_roi(data, x, y, w, h):
    '''
    提取data中左上角顶点坐标为(x, y)宽为w高为h的ROI
    :param data: 二维数组,类型为ndarray
    :param x: ROI左上角顶点的行索引,类型为int
    :param y: ROI左上角顶点的列索引,类型为int
    :param w: ROI的宽,类型为int
    :param h: ROI的高,类型为int
    :return: ROI,类型为ndarray
    '''

    #********* Begin *********#
    roi = data[x:x+h+1, y:y+w+1]
    return roi
    #********* End *********#

总结

以上就是对机器学习中的分片,切割,遍历的介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

校企合作项目总结

校企合作总结 前言项目框架开发待办水平越权总结 前言 寒假里小组给了校企合作的项目,分配给我的工作量总共也就两三套crud,虽然工作很少,但还是从里面学到了很多东西,收获了大量的实习经验,在这里总结记录一下。 项…

LLM@本地大语言模型@Gemma的安装与使用@dockerDesktop的安装和启动

文章目录 准备refsollama安装过程2b模型的效果小结👺 ollama的进一步使用帮助文档查看ollama安装了哪些模型使用皮肤来使聊天更易用 使用Chatbot UI皮肤安装docker👺启动docker载入和退出dockerchatbot 网页版皮肤 使用命令行聊天小结👺 准备…

vulhub中JBoss 4.x JBossMQ JMS 反序列化漏洞复现(CVE-2017-7504)

Red Hat JBoss Application Server(AS,也称WildFly)是美国红帽(Red Hat)公司的一款基于JavaEE的开源的应用服务器,它具有启动超快、轻量、模块化设计、热部署和并行部署、简洁管理、域管理及第一类元件等特…

R750 install AMD MI210GPU

一、 查看服务器GPU卡信息 可以首先在服务器上check 当前GPU的详细信息是否匹配 二、安装 Ubuntu22.04操作系统 服务器CHECK 安装的AMD GPU 是否被系统识别 #lspci | grep AMD 查看GPU信息 可以看到已经识别成功 三、安装AMD GPU驱动 https://rocm.docs.amd.com/projec…

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题,就是在存商品id的时候我将它使用了JSON.stringify的格式转换了!!!于是便爆出了500这个错误!!! 我将JSON.stringify的格式去除之后,它就正常显示了&…

数的范围 刷题笔记

思路 寻找第一个大于等于目标的 数 因为该数组是升序的 所以 我们可以采用二分的方式 逼近答案 定义一个左指针和一个右指针 当左右指针重合时 就是我们要找的答案 当我们寻找第一个大于等于x的数时 a[mid]>x,答案在mid处 或者在mid的左边 因此让rmid继续逼近 如果…

【Python】进阶学习:pandas--groupby()用法详解

📊【Python】进阶学习:pandas–groupby()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈…

【机器学习】有监督学习算法之:支持向量机

支持向量机 1、引言2、决策树2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥,泡澡啊。 小鱼:不去 小屌丝:… 此话当真? 小鱼:此话不假 小屌丝:到底去还是…

ssm666社区流浪动物救助领养系统的设计与开发

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1 课题…

Window下编写的sh文件在Linux/Docker中无法使用

Window下编写的sh文件在Linux/Docker中无法使用 一、sh文件目的1.1 初始状态1.2 目的 二、过程与异常2.1 首先获取标准ubuntu20.04 - 正常2.2 启动ubuntu20.04容器 - 正常2.3 执行windows下写的preInstall文件 - 报错 三、检查和处理3.1 评估异常3.2 处理异常3.3 调整后运行测试…

笔记本hp6930p安装Android-x86补记

在上一篇日记中(笔记本hp6930p安装Android-x86避坑日记-CSDN博客)提到hp6930p安装Android-x86-9.0,无法正常启动,本文对此再做尝试,原因是:Android-x86-9.0-rc2不支持无线网卡,需要在BIOS中关闭…

前端学习第六天-css浮动和定位

达标要求 了解浮动的意义 掌握浮动的样式属性 熟练应用清除浮动 熟练掌握定位的三种方式 能够说出网页布局的不同方式的意义 1. 浮动(float) 1.1 CSS 布局的三种机制 网页布局的核心——就是用 CSS 来摆放盒子。CSS 提供了 3 种机制来设置盒子的摆放位置,分…

【推荐算法系列十七】:GBDT+LR 排序算法

排序算法经典中的经典 参考 推荐系统之GBDTLR 极客时间 手把手带你搭建推荐系统 课程 逻辑回归(LR)模型 逻辑回归(LR,Logistic Regression)是一种传统机器学习分类模型,也是一种比较重要的非线性回归模型&#xff…

0.8秒一张图40hx矿卡stable diffusion webui 高质极速出图组合(24.3.3)

新消息是。经过三个月的等待,SD Webui (automatic1111)终于推出了新版本1.8.0,本次版本最大的更新,可能就是pytorch更新到2.1.2, 不过还是晚了pytorch 2.2.2版。 不过这版的一些更新,在forget分支上早就实现了,所以。…

快递批量查询高手:轻松管理物流信息,提升工作效率

快递批量查询高手:轻松管理物流信息,提升工作效率着 电商市场的不断壮大,物流行业的发展也日新月异。在如此繁忙的物流环境中,如何高效地管理物流信息成为了一个重要的课题。而在这个背景下,一款名为“快递批量查询高…

Linux网络编程——网络基础

Linux网络编程——网络基础 1. 网络结构模式1.1 C/S 结构1.2 B/S 结构 2. MAC 地址3. IP地址3.1 简介3.2 IP 地址编址方式 4. 端口4.1 简介4.2 端口类型 5. 网络模型5.1 OSI 七层参考模型5.2 TCP/IP 四层模型 6. 协议6.1 简介6.2 常见协议6.3 UDP 协议6.4 TCP 协议6.5 IP 协议6…

时产20吨成套饲料生产线设备;一键式操作省时省力

时产20吨成套饲料生产线设备采用钢架结构,确保了设备的稳定性和耐用性。这种结构不仅提供了强大的支撑力,还使得设备在长时间运行过程中能够保持稳定的性能。 该生产线设备由多个关键部分组成,包括原料预处理系统、粉碎系统、混合系统、制粒…

k8s-prometheus监控部署 22

新建项目仓库并上传部署prometheus所需的镜像 开始部署 修改svc访问方式为LoadBalancer 查看用户名和密码 访问grafana监控页面 http://192.168.182.103/​​​​​​ 修改可视化模板 官方监控模板:https://grafana.com/grafana/dashboards 访问prometheus监控页面…

vue2结合electron开发跨平台应用(桌面端应用)

1.确定nodejs和electron的版本号 确定nodejs和electron的版本号及其重要,因为electron的开发版本需要指定的nodejs版本支持。 本文安装测试使用的是: 1.node18.19.0 2.npm10.2.3 3.vue-cli5.0.8 4.electron29.0.0 2.创建vue2项目 vue create elctron29.0.0_no…

【MySQL】:约束全解析

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 约束概述二. 约束演示三. 外键约束3.1 介绍3.2 语法3.3 删除/更新行为 &…