《Numpy 简易速速上手小册》第6章:Numpy 高级数组操作(2024 最新版)

在这里插入图片描述

文章目录

  • 6.1 使用布尔索引和条件选取
    • 6.1.1 基础知识
    • 6.1.2 完整案例:筛选股市数据
    • 6.1.3 拓展案例 1:筛选健康数据
    • 6.1.4 拓展案例 2:筛选和替换
  • 6.2 缺失数据和无效数据处理
    • 6.2.1 基础知识
    • 6.2.2 完整案例:气象数据处理
    • 6.2.3 拓展案例 1:金融数据清理
    • 6.2.4 拓展案例 2:处理含有无穷值的数据
  • 6.3 数组的内存布局
    • 6.3.1 基础知识
    • 6.3.2 完整案例:分析数组内存布局
    • 6.3.3 拓展案例 1:优化数组操作
    • 6.3.4 拓展案例 2:创建有效的数组视图

6.1 使用布尔索引和条件选取

6.1.1 基础知识

布尔索引是 Numpy 中处理数组的强大手段之一,它允许我们根据条件快速选取数组中的元素。这种方法使用布尔数组(即由 TrueFalse 组成的数组)作为索引,以此来选取符合特定条件的元素。

  • 布尔运算:可以对数组进行比较运算(如 >, <, == 等),结果是一个布尔数组。
  • 条件选取:使用布尔数组作为索引来选取原数组中的元素。

6.1.2 完整案例:筛选股市数据

假设你有一组股市数据,你想筛选出所有收盘价高于平均值的日子。

import numpy as np# 假设这是 10 天的股市收盘价
closing_prices = np.array([120, 125, 130, 135, 140, 135, 130, 125, 120, 115])# 计算平均收盘价
mean_price = np.mean(closing_prices)# 使用布尔索引选取高于平均收盘价的日子
above_mean = closing_prices[closing_prices > mean_price]print("Days with Closing Prices Above Mean:", above_mean)

在这个案例中,我们首先计算了平均收盘价,然后使用布尔索引选取了所有高于该平均值的收盘价。

6.1.3 拓展案例 1:筛选健康数据

假设你正在处理一组人群的健康数据,需要筛选出所有血压在正常范围内的个体。

# 假设这是一组血压数据(收缩压)
blood_pressures = np.array([120, 125, 130, 140, 135, 150, 110, 115, 120, 125])# 定义血压正常范围
normal_bp_low, normal_bp_high = 110, 130# 使用布尔索引筛选正常血压的数据
normal_bp = blood_pressures[(blood_pressures >= normal_bp_low) & (blood_pressures <= normal_bp_high)]print("Individuals with Normal Blood Pressure:", normal_bp)

在这个案例中,我们使用了组合条件的布尔索引来筛选出处于正常血压范围内的个体。

6.1.4 拓展案例 2:筛选和替换

有时我们不仅要筛选数据,还要对这些数据进行替换。

# 假设这是一组产品评分数据
ratings = np.array([4, 3, 1, 5, 4, 2, 1, 5, 5, 3])# 将所有低于 3 分的评分提升为 3 分
ratings[ratings < 3] = 3print("Adjusted Ratings:", ratings)

在这个案例中,我们先筛选出所有低于 3 分的评分,然后将它们提升到 3 分,这种操作在数据清洗和预处理中非常常见。

通过这些案例,我们可以看到布尔索引和条件选取在数据处理中的强大应用。它们不仅能帮助我们快速筛选出感兴趣的数据,还能方便地对数据进行修改和管理。掌握这些技巧,你将能够更加自如地驾驭复杂的数据集。

图片 @misttylol


6.2 缺失数据和无效数据处理

6.2.1 基础知识

在现实世界的数据集中,缺失数据和无效数据是常见的问题。它们可能源于数据收集错误、传输问题或其他原因。处理这些数据是数据预处理的重要部分。

  • 识别缺失/无效数据:Numpy 中可以使用 np.isnan()np.isfinite() 等函数来识别缺失或无效数据。
  • 处理方法:对于缺失或无效的数据,常见的处理方法包括删除这些数据、填充默认值或使用统计方法(如平均值、中位数等)填充。

6.2.2 完整案例:气象数据处理

假设你正在处理一组气象数据,其中包含一些缺失的温度读数。

import numpy as np# 假设这是一组温度数据,其中 np.nan 表示缺失数据
temperatures = np.array([22.5, 23.0, np.nan, 24.5, 25.0, np.nan, 23.5])# 检查哪些是缺失值
missing_values = np.isnan(temperatures)# 计算缺失数据之外的平均温度
mean_temp = np.nanmean(temperatures)# 用平均温度替换缺失值
temperatures[missing_values] = mean_tempprint("Processed Temperatures:", temperatures)

在这个案例中,我们首先识别了缺失的温度读数,然后计算了剩余数据的平均温度,并用这个平均值替换了缺失的数据。

6.2.3 拓展案例 1:金融数据清理

在处理金融数据时,异常值的处理同样重要。

# 假设这是一组股票价格,其中一些价格是无效的
stock_prices = np.array([120, 125, -999, 130, -999, 135, 140])# 将无效的股票价格标记为 np.nan
stock_prices[stock_prices < 0] = np.nan# 使用前一个有效值替换无效值
valid_prices = np.where(np.isnan(stock_prices), np.nan_to_num(stock_prices, nan=np.nanmean(stock_prices)), stock_prices)print("Cleaned Stock Prices:", valid_prices)

在这个案例中,我们首先将无效的股价标记为 np.nan,然后使用 np.where()np.nan_to_num() 将无效值替换为前一个有效值。

6.2.4 拓展案例 2:处理含有无穷值的数据

处理包含无穷大或无穷小值的数据集也很重要。

# 创建一个含有无穷值的数组
data_with_infinity = np.array([1, 2, np.inf, 3, -np.inf, 4])# 替换无穷大和无穷小值为最大值和最小值
max_value = np.finfo(data_with_infinity.dtype).max
min_value = np.finfo(data_with_infinity.dtype).min
data_with_infinity = np.clip(data_with_infinity, min_value, max_value)print("Data without Infinity:", data_with_infinity)

在这个案例中,我们使用 np.clip() 函数将无穷大值替换为数据类型允许的最大值,将无穷小值替换为最小值。

处理缺失数据和无效数据是数据分析中的一个重要环节。掌握这些技巧可以帮助我们清理和准备数据,为后续的分析工作打下坚实的基础。

在这里插入图片描述


6.3 数组的内存布局

6.3.1 基础知识

了解 Numpy 数组在内存中的布局是优化性能的关键。数组的内存布局决定了数据是如何存储和访问的。

  • 连续性(Contiguity):在内存中,一个连续的数组可以提高数据处理的速度。Numpy 提供了 C 风格(行优先)和 F 风格(列优先)的数据存储。
  • 步长(Stride):步长是一个元组,表示为了到达当前维度下一个元素需要跨越的字节数。了解步长可以帮助我们更好地理解数组的内存布局。
  • 数据副本(Copy)与视图(View):在处理数组时,区分创建数据的副本还是视图是非常重要的。副本占用额外内存,但不会影响原始数据;视图不占用额外内存,但对视图的修改会影响原始数据。

6.3.2 完整案例:分析数组内存布局

假设你有一个二维数组,你想分析它的内存布局。

import numpy as np# 创建一个二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)# 获取数组的步长
strides = matrix.strides# 检查数组是否为 C 连续
c_contiguous = matrix.flags['C_CONTIGUOUS']# 检查数组是否为 F 连续
f_contiguous = matrix.flags['F_CONTIGUOUS']print("Strides:", strides)
print("C contiguous:", c_contiguous)
print("F contiguous:", f_contiguous)

在这个案例中,我们创建了一个二维数组,并分析了它的步长和连续性。

6.3.3 拓展案例 1:优化数组操作

理解内存布局可以帮助我们优化数组操作。

# 创建一个大型二维数组
large_matrix = np.random.rand(10000, 10000)# 创建一个 C 风格连续的副本
c_matrix = np.array(large_matrix, order='C')# 创建一个 F 风格连续的副本
f_matrix = np.array(large_matrix, order='F')# 比较操作性能
%timeit np.sum(c_matrix)
%timeit np.sum(f_matrix)

在这个案例中,我们比较了 C 风格和 F 风格连续数组的操作性能。

6.3.4 拓展案例 2:创建有效的数组视图

利用视图可以在不创建数据副本的情况下进行高效的数组操作。

# 创建原始数组
original_array = np.array([1, 2, 3, 4, 5, 6])# 创建一个视图
array_view = original_array[::2]# 修改视图
array_view[1] = 10print("Original Array:", original_array)
print("Array View:", array_view)

在这个案例中,我们创建了原始数组的一个视图,并演示了如何修改这个视图会影响原始数组。

通过对数组的内存布局有深入的理解,我们可以更加有效地管理和操作大型数据集。这不仅有助于提升性能,还可以使我们在数据处理中更加灵活。

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

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

相关文章

突破瓶颈,提升开发效率:Spring框架进阶与最佳实践-IOC

IOC相关内容 1.1 bean基础配置1.1.1 bean基础配置(id与class)1.1.2 bean的name属性步骤1&#xff1a;配置别名步骤2:根据名称容器中获取bean对象步骤3:运行程序 1.1.3 bean作用范围scope配置1.1.3.1 验证IOC容器中对象是否为单例验证思路具体实现 1.1.3.2 配置bean为非单例1.1.…

k8s中调整Pod数量限制的方法

一、介绍 Kubernetes节点每个默认允许最多创建110个pod&#xff0c;有时可能由于主机配置扩容的问题&#xff0c;从而需要修改节点pod运行数量的限制。 即&#xff1a;需要调整Node节点的最大可运行Pod数量。 一般来说&#xff0c;只需要在kubelet启动命令中增加–max-pods参数…

以“美”为鉴,探寻香港比特币现货ETF的未来发展

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 根据The Block于1月29日的报道&#xff0c;嘉实国际成为了首家向香港证监会提交比特币现货ETF申请的机构。早在去年12月22日&#xff0c;香港证监会发布了《有关证监会认可基金投资虚拟资产的通函》&#xff0c;明确…

华为云codeArts使用操作流程

一、开启服务 什么是华为云CodeArts&#xff1f; 本实验将在华为云CodeArts平台上搭建一个凤凰商城开发项目&#xff0c;并完成需求管理、代码仓库、代码检查、编译构建、发布、部署、流水线等软件开发操作。 1)新建项目 进入华为云“控制台”&#xff0c;鼠标移动到页面左侧菜…

使用“快速开始”将数据传输到新的 iPhone 或 iPad

使用“快速开始”将数据传输到新的 iPhone 或 iPad 使用 iPhone 或 iPad 自动设置你的新 iOS 设备。 使用“快速开始”的过程会同时占用两台设备&#xff0c;因此请务必选择在几分钟内都不需要使用当前设备的时候进行设置。 确保你当前的设备已连接到无线局域网&#xff0c;并…

【三维重建】运动恢复结构(SfM)

运动恢复结构是通过三维场景的多张图像&#xff0c;恢复出该场景的三维结构信息以及每张图片对应的摄像机参数。 欧式结构恢复(内参已知&#xff0c;外参未知) 欧式结构恢复问题&#xff1a; 已知&#xff1a;1、n个三维点在m张图像中的对应点的像素坐标 2、相机内参 求解&…

Qt之QLabel介绍

概述 QLabel是QT界面中的标签类&#xff0c;它从QFrame下继承&#xff0c;QLabel 类代表标签&#xff0c;它是一个用于显示文本或图像的窗口部件。我们主要介绍一下QLabel的一些简单的使用。 设置颜色背景色和字体的颜色大小 字体及颜色 设置文字使用的是setText函数。 QStri…

CSA发布 | 法律视角下的数据出境《2023年数据出境合规年鉴》

在全球数字产业以及大数据和云计算技术快速发展的背景下&#xff0c;数据流动对世界经济的影响日益显著。由此带来的数据红利和数据安全之间的冲突&#xff0c;将对未来数字经济的发展方向产生深刻影响。 2023 年可称为中国数据跨境监管的元年&#xff0c;这一年初出境评估的“…

算法:积木游戏学习数学

一、算法描述 小华和小微一起通过玩积木游戏学习数学。 他们有很多积木&#xff0c;每个积木块上都有一个数字&#xff0c;积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排&#xff0c;请小微找到这排积木中数字相同且所处位置最远的2块积木块&#xff0c;计算他们的…

第六讲:函数扩展(static,extern)

今天讲讲两个关键字&#xff0c;在此之前&#xff0c;我们先介绍两个概念。 1.作用域&#xff1a;某变量可以使用的范围。 1.1局部变量的作用域&#xff1a;变量所在的局部范围。 1.2全局变量的作用域&#xff1a;整个工程 2.生命周期&#xff1a;变量从申请内存到被回收内…

高中数学:逻辑用语及量词

一、逻辑用语 充分条件与必要条件 充分必要条件的判断&#xff0c;本质就是判断两个集合之间是子集还是真子集的关系 要点&#xff1a;看清楚谁是条件P&#xff0c;谁是结论Q 二、逻辑量词 存在量词与全称量词 命题的真假 三、常见题型 1、已知充分必要性&#xff0c;求…

Vue+OpenLayers7入门到实战:OpenLayers7使用一张静态图片作为地图的基本底图,使用png图片作为地图底图示例

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章介绍如何使用OpenLayers7在地图上使用一张静态图片作为地图的基本底图。 本章主要用处在于如果我们项目没有vmts、vms、xyz等地图服务,只有一张静态图片,也可以作为地图基本图层使用。 二、依赖和使用 "o…

美国DDOS服务器:应对攻击的策略与技术

分布式拒绝服务(DDOS)攻击是一种常见的网络攻击手段&#xff0c;旨在通过大量无用的请求拥塞目标服务器&#xff0c;使其无法正常处理合法请求。美国作为全球互联网技术的领先者&#xff0c;其DDOS服务器在应对这类攻击时具有一系列先进的技术和策略。本文将详细介绍美国DDOS服…

Arrays.asList()方法调用add()或remove()抛出java.lang.UnsupportedOperationException问题

在使用Arrays.asList方法将以,分割的字符串转为list集合时&#xff0c;调用add和remove等方法时会抛出java.lang.UnsupportedOperationException。以下为原因和解决方法。 原因&#xff1a; Arrays.asList()方法返回了一个Arrays类的一个继承了AbstractList的ArrayList内部类…

ElementUI 组件:Layout布局(el-row、el-col)

ElementUI安装与使用指南 Layout布局 点击下载learnelementuispringboot项目源码 效果图 el-row_el-col.vue页面效果图 项目里el-row_el-col.vue代码 <script> export default {name:el-row_el-col 布局 }</script><template><div class"roo…

科微/金航标kinghelm一直在技术上不断创新

宋仕强说&#xff0c;萨科微slkor&#xff08;www.slkoric.com&#xff09;/金航标kinghelm&#xff08;www.kinghelm.net&#xff09;一直在技术上不断创新&#xff0c;并将这些新技术应用于公司的产品中&#xff0c;推出的新产品&#xff0c;这让我们比同行发展快一些&#x…

【环境配置】安装了pytorch但是报错torch.cuda.is_availabel()=Flase

解决思路&#xff1a;import torch正常&#xff0c;说明torch包安装正常&#xff0c;但是不能和gpu正常互动&#xff0c;猜测还是pytroch和cuda的配合问题 1.查看torch包所需的cuda版本 我的torch是2.0.1&#xff0c;在现在是比较新的包&#xff0c;需要12以上的cuda支持&…

04:容器技术概述|镜像与容器|docker配置管理

容器技术概述&#xff5c;镜像与容器&#xff5c;docker配置管理 什么是容器优点缺点 docker与容器跳板机yum源添加docker软件在node节点验证软件包开启路由转发 镜像管理&容器管理如何获取镜像镜像备份与恢复运行容器查看镜像的启动信息镜像管理命令容器管理命令容器内部署…

【小白学unity记录】使用unity播放声音

1. 示例 unity中播放声音涉及到两个组件。AudioSource和AudioClip。AudioSource可以理解为播放器&#xff0c;AudioClip可以理解为音频片段文件。AudioSource可以通过.clip属性切换音频片段。 using UnityEngine;public class PlayerController : MonoBehaviour {private int…

uni-app小程序自定义导航栏

最近在开发一个uni-app小程序&#xff0c;用到了自定义导航栏&#xff0c;在这里记录一下实现过程&#xff1a; page.json 在对应页面路由的style中设置入"navigationStyle": "custom"取消原生导航栏&#xff0c;自定义导航栏 {"path": "…