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

news2024/11/17 16:40:16

文章目录

    • 前言
    • 数组的形状变换
      • 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 np

arr = 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.coloradmin.cn/o/1418023.html

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

相关文章

C++ 数论相关题目 求组合数I

直接按照公式求解会超时。 常用组合数递推式。 因此用递推式先预处理出来&#xff0c;然后查表。 #include <iostream> #include <algorithm>using namespace std;const int N 2010, mod 1e9 7;int c[N][N];void init() {for(int i 0; i < N; i )for(in…

Git 教程 | 将本地修改后的文件推送到 Github 指定远程分支上

Git 是一种分布式版本控制系统&#xff0c;用于敏捷高效地处理任何大小的项目。它是由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的开源版本控制软件。Git 的本地克隆就是一个完整的版本控制存储库&#xff0c;无论脱机还是远程都能轻松工作。开发人员会在本地提交其工…

AWS 专题学习 P10 (Databases、 Data Analytics)

文章目录 专题总览1. Databases1.1 选择合适的数据库1.2 数据库类型1.3 AWS 数据库服务概述Amazon RDSAmazon AuroraAmazon ElastiCacheAmazon DynamoDBAmazon S3DocumentDBAmazon NeptuneAmazon Keyspaces (for Apache Cassandra)Amazon QLDBAmazon Timestream 2. Data & …

专业做护眼灯的有哪些品牌?专业做护眼灯的品牌

相信很多家长都有过帮助孩子选购台灯的经历&#xff0c;但或许并不清楚市面上存在许多质量不合格的台灯。曾在央视一期节目曝光了许多LED台灯存在严重不合格的问题。尽管现在台灯通常需要执行强制性产品认证&#xff0c;并且进行不定期的抽样检查&#xff0c;但仍有一些没有接受…

【JaveWeb教程】(36)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(9)登录问题分析与会话控制技术讲解

目录 SpringBootWeb案例092. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术 SpringBootWeb案例09 2. 登录校验 2.1 问题分析 我们已经完成了基础登录功能的开发与测试&a…

2024年搭建幻兽帕鲁服务器价格多少?如何自建Palworld?

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、3M带宽96.75元/1个月、8核32G配置10M带宽90.60元/1个月&#xff0c;8核32G配置3个月271.80元。ECS…

【C++】引用、内联函数、auto关键字等

前言&#xff1a;在前面我们讲解了C入门基础的一些学习例如命名空间、缺省参数、函数重载等。今天我们将进一步的学习&#xff0c;跟着博主的脚步再次往前迈一步吧。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff23;学习…

高分文献解读|乳酸通过与可溶性腺苷酸环化酶结合调控铁代谢

乳酸(LA)的过量产生可能发生在运动期间或者许多疾病中&#xff0c;例如癌症中。个人伴有高乳酸血症的患者常表现为贫血、血清铁减少以及一种铁代谢关键调控因子—铁调素&#xff08;hepcidin&#xff09;升高。然而&#xff0c;目前尚不清楚乳酸是否以及如何调节铁调素的表达。…

Android Clear架构最强官方指南Kotlin版

Android Clear架构最强官方指南Kotlin版 在这篇文章中&#xff0c;我将介绍关于Android应用程序架构的一些内容。尽管自从早期更稳健的Android架构方法在移动开发中变得流行以来已经说了很多话&#xff0c;但改进和演进的空间总是存在的。 基于上述文章中的清晰架构示例&…

证券公司怎么选择?福州开股票账户佣金最低是多少?怎么开低佣金账户?

股票交易佣金是指投资者在进行股票交易时&#xff0c;需要向券商支付的手续费。具体的佣金费用根据券商的政策而有所不同&#xff0c;一般分为固定佣金和按比例佣金两种方式。 固定佣金是指交易每一笔固定收取一定金额的佣金&#xff0c;通常适用于较小交易量的投资者&#xf…

EasyExcel重复多次写入,合并单元格功能详细实现

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 EasyExcel如何…

TensorFlow Lite中文本分类在Android上的实践

#1 Tensorflow Lite TensorFlow Lite(后续简称TFL) 是 Google 开发的一个用于移动设备和嵌入式设备的开源库,旨在为移动终端设备提供机器学习推断。它是 TensorFlow 框架的轻量级版本,专门优化了模型的大小和性能,以适应资源受限的移动设备和嵌入式系统。 TFL 提供了一种在移…

力扣hot100 每日温度 单调递减栈

Problem: 739. 每日温度 文章目录 思路复杂度&#x1f49d; 单调栈 思路 &#x1f469;‍&#x1f3eb; 参考题解 复杂度 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) &#x1f49d; 单调栈 class Solution {public int[] dailyTem…

贝锐蒲公英全新网页认证,保障企业访客无线网络安全

随着企业规模的不断扩大、人员的增长、无线终端数量/类型的增加&#xff0c;传统WiFi无线网络会暴露出越来越多的问题&#xff0c;导致无线网络管理困难。 比如&#xff1a;采用弱密码、安全防护不到位的默认设置、员工缺乏信息安全意识、未经授人员权访问无线网络…… 这些问…

力扣日记1.28-【回溯算法篇】93. 复原 IP 地址

力扣日记&#xff1a;【回溯算法篇】93. 复原 IP 地址 日期&#xff1a;2023.1.28 参考&#xff1a;代码随想录、力扣 93. 复原 IP 地址 题目描述 难度&#xff1a;中等 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&…

(蓝桥杯每日一题)求最长回文串

问题描述 给出一个长度为 n 的小写字符串&#xff0c;求一个最长的子串 S&#xff0c;满足SXY,X&#xff0c;Y>1&#xff0c;且X,Y 均为回文串。 输入格式 输入包括一行: 第一行是一个长度为 n 的小写字符串。 输出格式 输出包括一行&#xff1a; 一行一个整数&#xff0c;表…

数据湖技术之应用场景篇

数据湖技术有较多的应用场景&#xff0c;本篇文章是针对一些典型的痛点场景做了一些介绍和说明。比如说在线数据抽取场景原有模式对线上库表产生较大压力&#xff0c;flink多流join维护的大状态导致的稳定性问题等等&#xff0c;具体场景如下图所示&#xff1a; 场景1:在线数据…

Mysql-InnoDB-数据落盘

概念 1 什么是脏页&#xff1f; 对于数据库中页的修改操作&#xff0c;则首先修改在缓冲区中的页&#xff0c;缓冲区中的页与磁盘中的页数据不一致&#xff0c;所以称缓冲区中的页为脏页。 2 脏页什么时候写入磁盘&#xff1f; 脏页以一定的频率将脏页刷新到磁盘上。页从缓冲区…

十大排序算法之冒泡排序

冒泡排序 冒泡排序是最基础的排序算法之一&#xff0c;但它并不是最优的排序算法。 1. 算法思想 冒泡排序是将数据中的每个数与相邻数进行比较并交换&#xff0c;大数往上冒&#xff0c;小数往下沉&#xff0c;每个数都遍历一次后便可以排出顺序。 2. 算法步骤 &#xff0…

【极数系列】Flink环境搭建Linux版本 (03)

文章目录 引言01 Linux部署JDK11版本1.下载Linux版本的JDK112.创建目录3.上传并解压4.配置环境变量5.刷新环境变量6.检查jdk安装是否成功 02 Linux部署Flink1.18.0版本1.下载Flink1.18.0版本包2.上传压缩包到服务器3.修改flink-config.yaml配置4.启动服务5.浏览器访问6.停止服务…