零基础上手Python数据分析 (23):NumPy 数值计算基础 - 数据分析的加速“引擎”

写在前面

在这里插入图片描述

—— 超越原生 Python 列表,解锁高性能数值计算,深入理解 Pandas 的底层依赖

在前面一系列关于 Pandas 的学习中,我们已经领略了其在数据处理和分析方面的强大威力。我们学会了使用 DataFrame 和 Series 来高效地操作表格数据。但是,你是否好奇,Pandas 为何能够如此高效地处理大规模数据?其背后隐藏着怎样的 “秘密武器”?

答案就是我们今天要深入学习的主角——NumPy (Numerical Python)

NumPy:Python 科学计算的基石

NumPy 是 Python 中用于 科学计算基础核心库。它提供了:

  1. 一个强大的 N 维数组对象 (ndarray)
  2. 用于操作这些数组的各种 高效函数 (例如数学运算、逻辑运算、形状操作、排序、选择等)。
  3. 用于线性代数、傅里叶变换和随机数生成的工具。

为什么在学习 Pandas 之后还要学习 NumPy?

你可能会问,既然 Pandas 已经那么好用了,为什么我们还要回过头来学习 NumPy? 原因主要有以下几点:

  • Pandas 的底层依赖: Pandas 的核心数据结构 Series 和 DataFrame 在底层很大程度上是建立在 NumPy 的 ndarray 之上的。理解 NumPy 的 ndarray 有助于我们更深入地理解 Pandas 的工作原理和性能特性。
  • 高性能数值计算: NumPy 的 ndarray 专为 高性能的数值计算 而设计。相比于 Python 内置的列表 (list),ndarray 在存储和处理大规模数值数据时具有显著的优势:
    • 更少的内存占用: ndarray 存储的是 同质数据类型 (所有元素类型相同),并且存储方式更紧凑。
    • 更快的计算速度: NumPy 的核心运算是用 C 语言 实现的,并且支持 向量化操作 (Vectorization),可以对整个数组进行批量操作,避免了 Python 层面低效的循环,速度远超原生 Python 代码。
  • 科学计算生态系统的基础: NumPy 是 Python 科学计算生态系统 (SciPy Stack) 的基石,许多其他重要的库,如 SciPy (科学计算库)、Matplotlib (可视化库)、Scikit-learn (机器学习库) 等,都依赖于 NumPy。掌握 NumPy 是深入学习这些库的前提。
  • 直接应用场景: 在某些数据分析场景,特别是涉及大量 数值计算、矩阵运算、线性代数 等任务时,直接使用 NumPy 可能比 Pandas 更简洁高效。

虽然本专栏将 NumPy 放在了 Pandas 之后讲解 (因为对于初学者,直接上手 Pandas 更贴近数据分析的实际应用流程),但掌握 NumPy 的核心概念和操作,对于提升你的数据分析效率、深入理解 Pandas 以及为后续学习更高级的技术打下基础,都至关重要。

本篇博客将带你深入 NumPy 的世界,重点学习:

  • NumPy 的核心数据结构:ndarray (N-维数组)
  • 创建 ndarray 的多种方法
  • ndarray 的重要属性
  • NumPy 的核心优势:向量化运算 (UFuncs)
  • ndarray 的索引与切片操作
  • 布尔索引与条件筛选

掌握 NumPy,你将拥有更强大的数值计算能力,并能更深刻地理解你所使用的 Pandas 工具!

⚙️ 一、NumPy 安装与导入

与 Pandas 和 Matplotlib 类似,如果你使用 Anaconda,NumPy 通常已经预装。 若未安装,可使用 pip 或 conda 安装:

pip install numpy
# 或者
conda install numpy

在 Python 脚本或 Jupyter Notebook 中,导入 NumPy 库,并约定俗成地将其简写为 np

import numpy as np

🔢 二、NumPy 的核心:ndarray 对象

NumPy 最核心的概念就是 ndarray (N-dimensional array),即 N 维数组。 它是一个 同质 (homogeneous) 数据类型的 多维网格

ndarray 的关键特性:

  • 维度 (Dimensions/Axes): ndarray 可以是一维、二维、三维甚至更高维度。 维度的数量称为 秩 (rank)
  • 形状 (Shape): 一个 元组 (tuple),描述了数组在 每个维度上的大小。 例如,一个 3 行 4 列的二维数组,其形状为 (3, 4)
  • 数据类型 (dtype): 数组中 所有元素的数据类型必须相同。 NumPy 支持多种数值数据类型,例如 int8, int16, int32, int64, uint8 (无符号整数), float16, float32, float64, complex64, complex128, bool, object (可以存储 Python 对象,但会失去 NumPy 的性能优势), string_, unicode_ 等。 这与 Python 列表可以包含不同类型元素的特性形成对比。
  • 固定大小 (Fixed Size): ndarray 在创建时大小是固定的。 改变数组的大小会创建一个新的数组并删除原来的数组。 这有助于提高内存效率和计算性能。

1. 创建 ndarray

有多种方法可以创建 NumPy ndarray 对象:

  • 从 Python 列表或元组创建:np.array()

    这是最常用的创建方式,可以将 Python 的列表或嵌套列表转换为 ndarray。

    # 创建一维数组
    list1 = [1, 2, 3, 4, 5]
    arr1d = np.array(list1)
    print("一维数组 arr1d:\n", arr1d)
    print("arr1d 的类型:", type(arr1d))
    print("arr1d 的数据类型:", arr1d.dtype)# 创建二维数组 (矩阵)
    list2d = [[1, 2, 3], [4, 5, 6]]
    arr2d = np.array(list2d)
    print("\n二维数组 arr2d:\n", arr2d)
    print("arr2d 的数据类型:", arr2d.dtype)# 创建指定数据类型的数组
    arr_float = np.array([1, 2, 3], dtype=np.float64) # 指定为 float64 类型
    print("\n指定数据类型的数组 arr_float:\n", arr_float)
    print("arr_float 的数据类型:", arr_float.dtype)arr_str = np.array([1, 2, 3], dtype=str) # 指定为字符串类型
    print("\n指定数据类型的数组 arr_str:\n", arr_str)
    print("arr_str 的数据类型:", arr_str.dtype)
    
  • 使用 NumPy 内置函数创建特定数组:

    • np.zeros(shape, dtype=float): 创建指定形状 shape 且所有元素都为 0 的数组。

      zeros_arr = np.zeros((2, 3)) # 创建一个 2x3 的全零浮点型数组
      print("\n全零数组 zeros_arr:\n", zeros_arr)
      
    • np.ones(shape, dtype=float): 创建指定形状 shape 且所有元素都为 1 的数组。

      o

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

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

相关文章

Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现

Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现 文章目录 需求:参考资料架构图了解Camera相关专栏零散知识了解部分相机源码参考,学习API使用,梳理流程,偏应用层Camera2 系统相关 修改文件-修改方案修改文件:修改…

HarmonyOS 框架基础知识

参考文档:HarmonyOS开发者文档 第三方库:OpenHarmony三方库中心仓 基础特性 Entry:关键装饰器 Components:组件 特性EntryComponent​​作用范围仅用于页面入口可定义任意可复用组件​​数量限制​​每个页面有且仅有一个无数量…

前端分页与瀑布流最佳实践笔记 - React Antd 版

前端分页与瀑布流最佳实践笔记 - React Antd 版 1. 分页与瀑布流对比 分页(Pagination)瀑布流(Infinite Scroll)展示方式按页分批加载,有明确页码控件滚动到底部时自动加载更多内容,无明显分页用户控制用…

Linux网络编程:TCP多进程/多线程并发服务器详解

Linux网络编程:TCP多进程/多线程并发服务器详解 TCP并发服务器概述 在Linux网络编程中,TCP服务器主要有三种并发模型: 多进程模型:为每个客户端连接创建新进程多线程模型:为每个客户端连接创建新线程I/O多路复用&am…

详解springcloudalibaba采用prometheus+grafana实现服务监控

文章目录 1.官网下载安装 prometheus和grafana1.promethus2.grafana 2. 搭建springcloudalibaba集成prometheus、grafana1. 引入依赖,springboot3.2之后引入如下2. 在yml文件配置监控端点暴露配置3. 在当前启动的应用代码中添加,在prometheus显示的时候附加当前应用…

数据分析1

一、常用数据处理模块Numpy Numpy常用于高性能计算,在机器学习常常作为传递数据的容器。提供了两种基本对象:ndarray、ufunc。 ndarray具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 ufunc提供了对数组快速运算的标准数学函数。 ndar…

DeepSeek智能时空数据分析(六):大模型NL2SQL绘制城市之间连线

序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…

2023ICPC合肥题解

文章目录 F. Colorful Balloons(签到)E. Matrix Distances(思维小结论)J. Takeout Delivering(最短路)G. Streak Manipulation(二分dp)C. Cyclic Substrings(回文自动机) 题目链接 F. Colorful Balloons(签到) int n;cin>>n;for(int i1;i<n;i) cin>>s[i];map<…

数字技术驱动下教育生态重构:从信息化整合到数字化转型的路径探究

一、引言 &#xff08;一&#xff09;研究背景与问题提出 在当今时代&#xff0c;数字技术正以前所未有的速度和深度渗透到社会的各个领域&#xff0c;教育领域也不例外。从早期的教育信息化整合到如今的数字化转型&#xff0c;教育系统正经历着一场深刻的范式变革。 回顾教…

terraform 动态块(Dynamic Blocks)详解与实践

在 Terraform 中&#xff0c;动态块&#xff08;Dynamic Blocks&#xff09; 是一种强大的机制&#xff0c;允许你根据变量或表达式动态生成配置块&#xff0c;避免重复编写相似的代码。这在处理需要重复定义的结构&#xff08;如资源参数、嵌套配置&#xff09;时特别有用。以…

Unity3D引擎框架及用户接口调用方式相关分析及汇总

分析目的 目前外网3D手游绝大部基于Unity3D引擎进行开发,Unity3D引擎属于商业引擎,引擎整理框架的运行机制较为神秘,本文介绍Unity引擎框架、对象组织方式、用户接口与引擎交互方式等原理,通过本文的分析和介绍可了解Unity3D框架中大致执行原理。 实现原理 Unity引擎作为…

react-09React生命周期

1.react生命周期&#xff08;旧版&#xff09; 1.1react初始挂载时的生命周期 1:构造器-constructor // 构造器constructor(props) {console.log(1:构造器-constructor);super(props)// 初始化状态this.state {count: 0}} 2:组件将要挂载-componentWillMount // 组件将要挂载…

【NVM】管理不同版本的node.js

目录 一、下载nvm 二、安装nvm 三、验证安装 四、配置下载镜像 五、使用NVM 前言&#xff1a;不同的node.js版本会让你在使用过程很费劲&#xff0c;nvm是一个node版本管理工具&#xff0c;通过它可以安装多种node版本并且可以快速、简单的切换node版本。 一、下载nvm htt…

八大排序——冒泡排序/归并排序

八大排序——冒泡排序/归并排序 一、冒泡排序 1.1 冒泡排序 1.2 冒泡排序优化 二、归并排序 1.1 归并排序&#xff08;递归&#xff09; 1.2 递归排序&#xff08;非递归&#xff09; 一、冒泡排序 1.1 冒泡排序 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换…

区块链随学随记

前情提要&#xff1a;本人技术栈为ganachehardhatpython ganache提供的是本地的区块链环境&#xff0c;相当于模拟以太坊&#xff0c;这样可以允许多个账户在本机交互。hardhat和remix都是区块链ide&#xff0c;用于编写和部署合约助记词有个数规定&#xff0c;只有满足这些个数…

Android原生开发基础

Android实战 Android 原生开发基础 知识点1 介绍了解2 系统体系架构3 四大应用组件4 移动操作系统优缺点5 开发工具6 配置工具7 下载相关资源8JDK下载安装流程9配置好SDK和JDK环境10 第一个Hello word11 AS开发前常用设置12模拟器使用运行13 真机调试14 AndroidUI基础布局15 加…

网页版 deepseek 对话问答内容导出为 PDF 文件和 Word 文件的浏览器插件下载安装和使用说明

文章目录 网页版 deepseek 浏览器扩展应用程序插件1. 预览效果2. 功能介绍3. 浏览器扩展应用程序下载3.1. 下载方式13.2. 下载方式24. 安装教程4.1. Chrome 浏览器安装步骤4.2. Edge 浏览器安装步骤5. 使用说明网页版 deepseek 浏览器扩展应用程序插件 1. 预览效果 预览效果 导…

DBdriver使用taos数据库

首先创建连接 连接后比如数据库里有三个库 选择其中的hypon 选中localhost&#xff0c;右键sql编辑器&#xff0c;打开sql控制台 就插入了一条数据

【前端】【面试】如何实现图片渐进式加载?有几种方法

前端图片渐进式加载 一、技术原理解析 渐进式加载是通过分阶段、按需加载图片&#xff0c;以提升用户体验和页面性能的优化技术。主要包括以下实现方式&#xff1a; 懒加载&#xff1a;基于IntersectionObserver API&#xff0c;当图片进入浏览器视口时才发起加载请求&#…

Spring Boot 中的条件注解

Spring Boot条件注解的汇总&#xff1a; 注解作用判断依据使用场景ConditionalOnBean容器中存在指定Bean时&#xff0c;被注解的配置或Bean定义生效指定Bean在容器中存在依赖其他已存在Bean时配置相关功能ConditionalOnCheckpointRestore在特定检查点恢复相关条件满足时生效满…