NumPy数据分析基础:NumPy特性以及Python内置数据结构对比详解

简介: NumPy数据分析基础:NumPy特性以及Python内置数据结构对比详解

前言


作为数据分析三巨头Pandas、matplotlib、NumPy之一,必然要给足面子单独拿出来讲解一波。NumPy应用场景十分宽泛,Pandas很多函数转换后也都是NumPy数组类型的数据结构。在机器学习、深度学习以及一些数据处理操作中使用的频率甚至比Pandas都高。而且NumPy功能强大,使用起来也十分便捷,支持多种复杂操作。平时我的Pandas以及一些机器学习的文章都有用到NumPy,但是博客内容并没有详细解答NumPy的操作也没有记录有关NumPy操作的一些具体函数解答。对于我这种追求一站式服务需求的博主来说着实有点不妥,故把旧坑补上,出一期全新的一文速学系列-Numpy数据分析基础专栏。


此系列文章将被纳入我的专栏一文速学系列-NumPy数据分析基础,基本覆盖到使用NumPy数据分析日常业务以及常规的数学建模分析以及复杂操作方方面面的问题。从基础的数组操作逐步入门到处理矩阵矢量特征等复杂操作,以及专业的NumPy常用函数讲解,我都将花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发、数学建模、Python工程的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


一、Numpy与Python内置结构区别


一个用python实现的科学计算,包括:


1、一个强大的N维数组对象Array;


2、比较成熟的函数库;


3、用于整合C/C++和Fortran代码的工具包;


4、实用的线性代数、傅里叶变换和随机数生成函数。


Numpy和稀疏矩阵运算包scipy配合使用更加方便,配合Pandas数据分析更加全面。NumPy是Python中科学计算的基本包。它是一个Python库,提供多维数组对象、各种派生对象(如掩码数组和矩阵),以及对数组进行快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计操作、随机模拟等。


NumPy包的核心是ndarray对象。这封装了同构数据类型的n维数组,为了提高性能,许多操作都在编译的代码中执行。NumPy数组和标准Python序列之间有几个重要区别:


与Python列表(可以动态增长)不同,NumPy数组在创建时具有固定大小。更改标准阵列的大小将创建一个新阵列并删除原始阵列。

NumPy数组中的元素都需要具有相同的数据类型,因此内存大小相同。例外情况是:可以有(Python,包括NumPy)对象的数组,从而允许不同大小的元素的数组。

NumPy数组便于对大量数据进行高级数学和其他类型的操作。通常,与使用Python的内置序列相比,此类操作的执行效率更高,代码更少。

越来越多的基于Python的科学和数学软件包正在使用NumPy数组;虽然它们通常支持Python序列输入,但它们在处理之前将此类输入转换为NumPy数组,并且通常输出NumPy数组。换句话说,为了有效地使用当今许多(甚至大多数)基于Python的科学/数学软件,仅仅知道如何使用Python的内置序列类型是不够的,还需要知道如何使用NumPy数组。


二、操作性能对比


序列大小和速度在科学计算中尤为重要。作为一个简单的例子,考虑将一维序列中的每个元素与另一个长度相同的序列中的相应元素相乘的情况。如果数据存储在两个Python列表a和b中,我们可以迭代每个元素:

a=[1,2,3,4]
b=[5,6,7,8]
c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

但如果a和b都包含数百万个数字,Python中循环远远没有C言语高效。可以用C语言通过编写来更快地完成相同的任务(为了清晰起见,忽略了变量声明和初始化、内存分配等):

for (i = 0; i < rows; i++) {
  c[i] = a[i]*b[i];
}


但是存在多维数组的情况就十分的复杂了,尤其是多维数组中再进行聚合操作,将大大增加了代码的复杂度和时间复杂度。

for (i = 0; i < rows; i++) {
  for (j = 0; j < columns; j++) {
    c[i][j] = a[i][j]*b[i][j];
  }
}

但是NumPy基于以上两种方式的优化,它底层代码是由C语言编写,而且使用方法极其简单:当涉及到ndarray时,逐元素操作是“默认模式”,但逐元素操作由预编译的C代码快速执行:

import numpy as np
a=np.array([1,2,3,4])
b=np.array([5,6,7,8])
c=a*b


以接近C的速度执行前面的示例所做的操作,并且基于Python的代码具有简单性。使用NumPy甚至更简单。最后一个例子说明了NumPy的两个特性,它们是其强大功能的基础:矢量化和广播。


三、底层架构


矢量化描述了代码中没有任何显式循环、索引等,当然,这些都是在优化、预编译的C代码中“幕后”发生的。矢量化代码有许多优点,其中包括:


矢量化代码更简洁,更易于阅读

更少的代码行通常意味着更少的bug

代码更接近于标准的数学符号(通常更容易正确编码数学结构)

矢量化会产生更多的“Pythonic”代码。如果没有矢量化,我们的代码将充斥着低效和难以阅读的循环。

广播是用于描述操作的隐式元素逐个元素行为的术语;一般来说,在NumPy中,所有操作,不仅是算术操作,而且是逻辑、位、函数等,都以这种隐式的逐元素方式表现,即它们广播。此外,在上面的示例中,a和b可以是相同形状的多维数组,或者是一个标量和一个数组,甚至是具有不同形状的两个数组,前提是较小的数组可以“扩展”为较大的数组的形状,从而使生成的广播明确无误。有关广播的详细“规则”,请参见:


Broadcasting — NumPy v1.24.dev0 Manual


NumPy完全支持面向对象的方法,再次从ndarray开始。例如,ndarray是一个类,拥有许多方法和属性。它的许多方法都是由最外层的NumPy名称空间中的函数镜像的,允许程序员以他们喜欢的任何范式进行编码。这种灵活性使NumPy数组方言和NumPy-ndarray类成为Python中使用的多维数据交换的事实语言。

目录
相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
359 1
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
195 0
|
3月前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
212 3
|
5月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
677 0
|
2月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
3月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
4月前
|
存储 数据挖掘 大数据
基于python大数据的用户行为数据分析系统
本系统基于Python大数据技术,深入研究用户行为数据分析,结合Pandas、NumPy等工具提升数据处理效率,利用B/S架构与MySQL数据库实现高效存储与访问。研究涵盖技术背景、学术与商业意义、国内外研究现状及PyCharm、Python语言等关键技术,助力企业精准营销与产品优化,具有广泛的应用前景与社会价值。
|
4月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
421 0
|
5月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
178 1
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析,别再死磕Excel了!
Python数据分析,别再死磕Excel了!
330 2

推荐镜像

更多