【数据分析】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 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)

条件筛选运行结果

在这里插入图片描述

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

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

相关文章

qemu单步调试arm64 linux kernel

一、背景和目的 qemu搭建arm64 linux kernel环境-CSDN博客 之前介绍了qemu启动kernel的配置步骤和方法&#xff0c;现在开始我们的调试&#xff0c;这篇文章主要讲解如何单步调试内核&#xff0c;所有的实验还是基于ARM64&#xff1b; 二、环境准备 需要准备hostx86 target…

VirtualBox:安装提示缺少python core和win32 api

最近升级了Ubuntu22.04&#xff0c;查了一下&#xff0c;VirtualBox的增强功能&#xff0c;居然用时5分钟。 5min 18ms vboxadd.service 据说升级VirtualBox的增强功能能解决这个问题&#xff0c;于是先升级VirtualBox&#xff0c;但是安装VirtualBox却报缺少python core及win3…

Android App开发-简单控件(4)——按钮触控和图像显示

3.4 按钮触控 本节介绍了按钮控件的常见用法&#xff0c;包括&#xff1a;如何设置大小写属性与点击属性&#xff0c;如何响应按钮的点击事件和长按事件&#xff0c;如何禁用按钮又该如何启用按钮&#xff0c;等等。 3.4.1 按钮控件Button 除了文本视图之外&#xff0c;按钮…

【GAMES101】Lecture 11 贝塞尔曲线

曲线这部分基本上就单讲了贝塞尔曲线 目录 贝塞尔曲线&#xff08;Bezier curves&#xff09; De Casteljau’s algorithm B-splines 贝塞尔曲线&#xff08;Bezier curves&#xff09; 很早之前说过的这种矢量图是不会随着放大而失真的&#xff0c;像这种字体&#xff0c…

Mysql第一天

数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。(可掉电:内存 使用高电压和低电压来区别0和1进行数据的一个存储但是一旦断电了电压都没了 0和1也就没有了)大多数情况下&#xff0c;特别是企 业级应用&#…

CSS 星空按钮

<template><button class="btn" type="button"><strong>星空按钮</strong><div id="container-stars"><div id="stars"></div></div><div id="glow"><div class=…

HCIA-HarmonyOS设备开发认证-3.内核基础

目录 前言目标一、进程与线程待续。。。 前言 对于任何一个操作系统而言&#xff0c;内核的运行机制与原理是最为关键的部分。本章内容从多角度了解HarmonyOS的内核运行机制&#xff0c;涵盖进程与线程的概念&#xff0c;内存管理机制&#xff0c;网络特性&#xff0c;文件系统…

vue3 + ts vue_3.4 setup单文件组件中的属性

props 各种类型 <script lang"ts" setup>import { ref, PropType } from vue;interface listType {addres: string;code: number;}interface ftObj {obj1: string[];obj2: {[key: string]: any;};}const props defineProps({name: {type: String as PropType&…

C 练习实例50-使用Dev-C++创建项目(圆形体体积计算器)

项目展示 项目案例&#xff1a;圆形体体积计算器 vol.h文件 #include <stdio.h> #include <math.h> #define PI 3.141592654 void cal(int sel); //函数声明 double vol_ball(void); double vol_cylind(void); double vol_cone(void); main.c文件 #include &quo…

代理IP使用指南:风险与注意事项

在当今的数字化时代&#xff0c;使用在线代理IP已经成为一种常见的网络行为。然而&#xff0c;在使用这些代理IP时&#xff0c;我们需要注意一些风险和问题&#xff0c;以确保我们的网络安全和隐本私文。将探讨使用代理IP时需要注意的几个关键问题。 1、代理IP的安全性 使用代理…

【JavaLearn】#(29)Maven引入、Maven项目类型、Maven安装与配置、Maven项目的创建和使用、pom配置文件介绍

1. Maven引入 1.1 传统方式中项目jar包资源的问题 项目中的jar包资源&#xff08;如JDBC驱动包&#xff09;需要我们自己从网上下载&#xff0c;然后手动导入到项目中使用 –> 一旦jar包资源过多&#xff0c;容易造成遗漏&#xff0c;且不好管理 如果有两个项目&#xff0…

LabVIEW动态数据交换实现数据通信

LabVIEW动态数据交换实现数据通信 介绍了LabVIEW软件在驱动一般多功能接口卡中的应用。LabVIEW作为一种图形化编程平台&#xff0c;被广泛应用于自动测量系统、工业过程自动化等领域。利用LabVIEW驱动实验室中常用的多功能接口卡&#xff0c;以实现数据采集和分析。 系统主要…

C#算法(11)—求三个点构成圆的圆心坐标和半径

前言 我们在上位机开发领域也经常会碰到根据三个点求出圆的圆心、半径等信息的场景,本文就是详细的介绍如何根据三个点使用C#代码求出三点构成的圆的圆心坐标、圆半径、三点构成的圆弧的角度。 1、3点求圆分析 A、B、C三个点都是圆上的坐标点,过向量AB做中垂线,过向量AC做…

HCIP寒假第十次作业

第一步&#xff0c;给pc配置IP192.268.1.2-192.168.1.4 第二步&#xff0c;在三个交换机上划分vlan [sw1]vlan 3 [sw1]interface e0/0/2 [sw1-Ethernet0/0/2]port link-type access [sw1-Ethernet0/0/2]port default vlan 3 [sw2]vlan 2 lsw2]interface e0/0/2 [sw2…

【c++】构造函数和析构函数

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器…

2024年第一篇博客

这是2024年的第一篇博客&#xff0c;2023年笔者经历了一连串的生活、工作、学习上的转折和调整&#xff0c;跌跌撞撞时光飞逝&#xff0c;转眼间就踏着元旦的钟声步入了2024年&#xff0c;前思后想、辗转反侧、犹豫再三不知道从哪里开始博客新的篇章&#xff0c;这个问题坦诚说…

【Spark系列3】RDD源码解析实战

本文主要讲 1、什么是RDD 2、RDD是如何从数据中构建 一、什么是RDD&#xff1f; RDD&#xff1a;弹性分布式数据集&#xff0c;Resillient Distributed Dataset的缩写。 个人理解&#xff1a;RDD是一个容错的、并行的数据结构&#xff0c;可以让用户显式的将数据存储到磁盘…

嵌入式Linux系统引导过程中的设备驱动加载

大家好&#xff0c;今天给大家介绍**嵌入式Linux系统引导过程中的设备驱动加载&#xff0c;**文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 **在嵌入式Linux系统的引导过程中&#xff0c…

杨占华主任:冠心病,中医好还是西医好

冠心病是一种慢性疾病&#xff0c;治疗时间相对较长&#xff0c;恢复缓慢。一般来说&#xff0c;冠心病患者也面临着巨大的心理压力。选择中药治疗好还是西药治疗好&#xff1f; 冠心病的西医治疗主要包括药物治疗、冠状动脉支架植入和冠状动脉搭桥术。 中医治疗冠心病的主要方…

Open CASCADE学习|读取STEP文件并显示

STEP文件是基于ISO 10303标准创建的三维模型数据交换文件&#xff0c;也称为产品模型数据交换标准&#xff08;Standard Exchange of Product data model&#xff09;。这种文件格式旨在提供一个不依赖具体系统的中性机制&#xff0c;实现产品数据的交换和共享。 STEP文件是一…