【数据分析】numpy基础第二天

文章目录

    • 前言
    • 数组的形状变换
      • reshape的基本介绍
      • 使用reshape
      • reshape([10, 1])运行结果
      • reshape自动判断形状
      • reshape([-1, 1])运行结果
    • 合并数组
      • 使用vstack和hstack
      • vstack和hstack的运行结果
      • 使用concatenate
      • concatenate运行结果
    • 分割数组
      • array_split运行结果
    • 数组的条件筛选
      • 条件筛选运行结果

前言

本文包含数组的形状变换数组的合并和分割数组的条件筛选,为了专注于应用,我只会讲解其中相对常用的几个部分。

建议先读完第一天(点击传送)的文章再读本文。

本文代码:
链接
提取码:1024`

数组的形状变换

在Numpy中,数组的形状变换是非常常见的操作,它让你能够重新排列数组的维度。本人认为最常用的形状变换方法是reshape,因此本部分我们只会讲解reshape

reshape的基本介绍

通常,我们会给reshape传入一个列表,或者元祖,这里为了区分圆括号,我们将会传入列表,列表中的元素指定了形状。在下面的代码中,我们将会写reshape([10, 1])reshape([-1, 1])

使用reshape

假设你有一个1维数组(只有一个维度的数组),你想要将它转换为一个多个行1个列的数组(拥有两个维度的数组)(通常,这是一个适合sklearn的机器学习模型的输入格式的2维数组),现在我们知道这个1维数组有10个元素,如果它们要变成只有1列的形式,意味着它们有10行,我们可以写reshape([10, 1]),代表将数组转为10行1列的二维数组,请看下面代码:

import numpy as np# 创建一个1维数组
arr = np.arange(10)  # 这将生成一个包含0到9的数组# 使用reshape将其变为2维数组
arr_reshaped = arr.reshape([10, 1])
print('原来的数组:')
print(arr)
print()
print('reshape([10, 1])之后的数组:')
print(arr_reshaped)

reshape([10, 1])运行结果

可以看到,我们的数组的形状已经成功改变了。
在这里插入图片描述

reshape自动判断形状

上文中,我们希望将一个一维数组,arr,转为一个拥有多个行一个列的二维数组,由于我们很清楚arr 中有10个元素,所以我们写了reshape(10, 1),但如果我们不知道有多少个元素,但是仍然希望将这个一维数组变成多个行一个列的二维数组呢?此时,我们可以写reshape(-1, 1)-1代表的是:让Numpy自动推导形状

具体使用请看下面代码:

import numpy as np# 创建一个1维数组
arr = np.arange(10)  # 这将生成一个包含0到9的数组# 使用reshape将其变为2维数组
arr_reshaped = arr.reshape([-1, 1])
print('原来的数组:')
print(arr)
print()
print('reshape([-1, 1])之后的数组:')
print(arr_reshaped)

reshape([-1, 1])运行结果

可以看到,即使我们没有指定行数为10,Numpy也自动推导出了新形状应有的行的个数。

在这里插入图片描述

合并数组

合并是将多个数组拼接为一个更大的数组。在Numpy中,你可以用concatenate、vstack和hstack等方法来实现。

使用vstack和hstack

比较简单易理解的是下面两种方法:

  • vstack(垂直堆叠)
  • hstack(水平堆叠)

我们一般会把要进行堆叠的Numpy数组放入一个列表中,再传给vstackhstack,比如vstack([arr1, arr2]),我们把arr1arr2装入一个列表中,传给vstack进行垂直堆叠,hstack的使用方法同理。

具体请看下面的代码:

import numpy as np# 创建两个数组
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])# 垂直堆叠
arr_vstack = np.vstack([arr1, arr2])# 水平堆叠
arr_hstack = np.hstack([arr1, arr2])
print('arr1: ')
print(arr1)
print()
print('arr2:')
print(arr2)
print()
print('arr1和arr2进行vstack(垂直堆叠)之后:')
print(arr_vstack)
print()
print('arr1和arr2进行hstack(水平堆叠)之后:')
print(arr_hstack)

vstack和hstack的运行结果

在这里插入图片描述

使用concatenate

concatenate相对更加灵活,但是对于初学者来说也相对复杂。

concatenate相对vstackhstack,多了一个参数叫axis,你可以通过指定axis的值指定堆叠的轴

  • axis=0时,在的轴上进行堆叠,与vstack的效果相同
  • axis=1时,在的轴上进行堆叠,与hstack的效果相同

axis更大的时候,就是在高维数组上的操作了,对于初学者来说可能会太过抽象,可以暂时忽略,先理解简单情况,学习会更高效。

print('arr1: ')
print(arr1)
print()
print('arr2:')
print(arr2)
print()# 使用concatenate进行垂直堆叠
arr_vstack = np.concatenate([arr1, arr2], axis=0)print('arr1和arr2进行concatenate([arr1, arr2], axis=0)之后:')
print(arr_vstack)# 使用concatenate进行水平堆叠
arr_hstack = np.concatenate([arr1, arr2], axis=1)print('arr1和arr2进行concatenate([arr1, arr2], axis=1)之后:')
print(arr_hstack)

concatenate运行结果

可以看到,我们只需要使用一个concatenate就可以完成vstackhstack两者的任务。
在这里插入图片描述

分割数组

数组的分割操作相对较少用,我们了解一下即可。

我们可以使用array_split,将一个数组分为指定数量的部分。

具体请看下面代码:

import numpy as nparr = np.arange(10)  # 创建一个包含0到9的数组
newarr = np.array_split(arr, 5)  # 分割成5部分print(newarr)

array_split运行结果

可以看到我们的数组被分割成了5个相同大小的部分。
在这里插入图片描述

数组的条件筛选

在Numpy中,你可以使用条件筛选来获取数组中符合特定条件的元素,这里的筛选操作和pandas相差不大,弄懂了numpy的条件筛选,你可以很自然地用到pandas上。

对于单个条件:

  • 筛选出数组中大于5的元素,可以写arr[arr > 5]
  • 筛选出数组中等于5的元素,可以写arr[arr == 5]
  • 筛选出数组中小于5的元素,可以写arr[arr < 5]

对于多个条件:

  • 筛选出数组中小于5,同时大于2的元素,可以写arr[(arr < 5) & (arr > 2)]

注意: 不同条件必须使用圆括号括起来。如果对这个注意点有疑问,请看解释,如果看解释看得一头雾水,请跳过。

解释:
&代表and,也就是二进制运算中的按位与运算,因为按位与的特性,也有人会将&当成Python的关键字and使用来结合多个条件,这里刚刚提到的(arr < 5) & (arr > 2)就是这个用法。

如果写arr & 5,代表对arr中的所有元素跟5进行一次按位与运算,运算结果是数值,比如,arr中的数字3的二进制表达是011,因为arr & 5,所以arr中的数字3会与数字5的二进制表达(101)进行按位与运算,运算结果是001,也就是十进制中的1。

因此&的结果不仅仅是结合多个条件中得到的true或者false,在一些需要用到位运算的情况下,我们可能希望比较按位与之后的数值结果,而不是简单地使用&来结合多个条件。既然有按位与结合条件这两种用法,如果不同条件不加括号,难免造成歧义,为了消除歧义,Numpy的开发者要求我们不同条件必须使用圆括号括起来



以此类推,你可以自己尝试编写其它类似的代码。 具体请看下面的代码。
import numpy as np# 创建一个数组
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])# 条件筛选
greater = arr[arr > 5]
equals = arr[arr == 5]
less = arr[arr < 5]
between = arr[(arr < 5) & (arr > 2)]print('大于5:', greater)
print('等于5:', equals)
print('小于5:', less)
print('小于5同时大于2:', between)

条件筛选运行结果

在这里插入图片描述

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

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

相关文章

C++ 数论相关题目:卡特兰数应用、快速幂求组合数。满足条件的01序列

给定 n 个 0 和 n 个 1 &#xff0c;它们将按照某种顺序排成长度为 2n 的序列&#xff0c;求它们能排列成的所有序列中&#xff0c;能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。 输出的答案对 1097 取模。 输入格式 共一行&#xff0c;包含整数 n 。 …

【计网·湖科大·思科】实验五 IPV4地址-分类地址和构建超网

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

highcharts.css文件的样式覆盖了options的series里面的color问题解决

文章目录 一、问题背景二、解决问题 一、问题背景 原本的charts我们的每个数据是有对应的color显示的&#xff0c;如下图&#xff1a; 后面我们系统做了黑白模式&#xff0c;引入了highcharts的css文件&#xff0c;结果highcharts的css文件中class的颜色样式覆盖了我们数据中的…

Rollup:打包 TypeScript - React 组件库

调用浏览器摄像头拍照组件 1、前提1、安装依赖2、添加 rollup.config.js 配置3、修改 package.json3.1 添加打包命令3.2 添加组件入口3.3 添加组件声明入口3.4 浏览器支持 1、前提 1.1 通过 create-react-app take-photo --template 创建前端应用 1.2 添加组件 TakePhoto (拍照…

差异性分析汇总

在做科研写论文的时候&#xff0c;我们总会听说要对数据进行差异性分析&#xff0c;那么何为差异性分析&#xff1f;差异性分析常用的方法有哪些&#xff1f;这些方法应该如何进行分类&#xff1f;如何选择&#xff1f;差异性分析的数据格式是怎么样的&#xff1f;软件如何操作…

如何在Win系统安装Jupyter Notbook并实现无公网ip远程访问本地笔记

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

C语言-指针的基本知识(上)

一、关于内存 存储器&#xff1a;存储数据器件 外存 外存又叫外部存储器&#xff0c;长期存放数据&#xff0c;掉电不丢失数据 常见的外存设备&#xff1a;硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器&#xff0c;暂时存放数据&#xff0c;掉电数据…

Android 水印效果

Android 水印效果 本文主要介绍下android 中水印的实现效果. 实现的方式有多种,就不一一赘述了, 本文就是通过自定义drawable来实现水印. 不多说,直接上代码吧: import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; i…

freeRTOS

1.新建一个无FreeRTOS的工程&#xff0c;取名为Motor 根据风扇模块PDF原理图和操作文档让风扇转动 1.新建一个包含FreeRTOS的工程&#xff0c;取名为Semaphore 2.根据信号量的文档先预习信号量的创建步骤和API函数 3.完成使用信号量访问共享资源的实验 具体步骤&#xff1a; 创…

Unity制作右键菜单(自适应分辨率)

一、需求 右键触发打开菜单&#xff0c;左键在内部可选择选项&#xff0c;左键单击菜单范围外关闭。难点在于屏幕坐标系&#xff0c;鼠标位置&#xff0c;UI位置之间的关系。 二、理论 前置知识&#xff1a; unity中&#xff0c;用RectTransform对象的position.x和position.y表…

vscode连不上虚拟机,一直密码错误

最近在做毕设&#xff0c;但是vscode使用连接不上虚拟机&#xff0c;我以为是网络配置的问题&#xff0c;一顿查阅没找到原因。 后来查了一下ssh的日志&#xff0c;发现ssh有消息&#xff0c;但是也提示密码错误。 没找到密码配置格式什么的&#xff0c;经查看sshd配置文件发现…

C语言第十二弹--扫雷

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…

自动化软件开发常用代码分享!

随着科技的发展&#xff0c;自动化软件开发已经成为现代企业不可或缺的一部分&#xff0c;自动化软件可以帮助企业提高生产效率、降低成本、优化业务流程。 而在自动化软件开发中&#xff0c;代码是实现这些功能的基础&#xff0c;本文将分享一些常用的自动化软件开发代码&…

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…

计算机网络·网络层

网络层 网络层提供的两种服务 争论&#xff1a; 网络层应该向运输层提供怎样的服务&#xff1f;面向连接还是无连接&#xff1f; 在计算机通信中&#xff0c;可靠交付应当由谁来负责&#xff1f;是网络还是端系统&#xff1f; 2 种观点&#xff1a; 面向连接的可靠交付。 无连…

macOS与Linux相互投屏的方法

很多人面对跨系统投屏都望而却步。其实只要找对方法&#xff0c;两台不同系统的电脑也可以相互投屏。 今天就来看看Linux系统和macOS系统如何相互投屏&#xff01; 第一步&#xff0c;将Linux系统电脑和macOS系统电脑连接同一网络。假设是macOS系统投屏到Linux系统&#xff0c;…

【数据分享】1929-2023年全球站点的逐年平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

二手交易|校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

《动手学深度学习(PyTorch版)》笔记4.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…