【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作

这篇具有很好参考价值的文章主要介绍了【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、前言

二、实验环境

三、NumPy

0、多维数组对象(ndarray)

多维数组的属性

1、创建数组

2、数组操作

3、数组数学

4、数组广播

5、排序操作

1. np.sort() 函数

2. np.argsort() 函数

3. ndarray.sort() 方法

4. 按列或行排序

5. np.lexsort() 函数

6. np.partition() 函数

7. np.argpartition() 函数

8. ndarray.argsort() 方法


一、前言

        Python是一种高级编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名,并且具有强大的功能和广泛的应用领域。Python具有丰富的标准库和第三方库,可以用于开发各种类型的应用程序,包括Web开发、数据分析、人工智能、科学计算、自动化脚本等。

        Python本身是一种伟大的通用编程语言,在一些流行的库(numpy,scipy,matplotlib)的帮助下,成为了科学计算的强大环境。本系列将介绍Python编程语言和使用Python进行科学计算的方法,主要包含以下内容:

  • Python:基本数据类型、容器(列表、元组、集合、字典)、函数、类
  • Numpy:数组创建、数组操作、数组数学、广播
  • Matplotlib:绘图风格和类型、图表自定义、多子图和布局
  • IPython:创建笔记本、典型工作流程

 二、实验环境

matplotlib 3.5.3
numpy 1.21.6
python 3.7.16
  • 运行下述命令检查Python版本
 python --version 
  • 运行下述代码检查Python、NumPy、Matplotlib版本
import sys
import numpy as np
import matplotlib

print("Python 版本:", sys.version)
print("NumPy 版本:", np.__version__)
print("matplotlib 版本:", matplotlib.__version__)

【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作,深度学习,Python,深度学习,python,numpy

三、NumPy

        NumPy(Numerical Python)是一个用于科学计算的Python库。它提供了一个强大的多维数组对象(ndarray),用于进行高效的数值运算和数据处理。Numpy的主要功能包括:

  1. 多维数组:Numpy的核心是ndarray对象,它是一个多维数组,可以存储同类型的元素。这使得Numpy非常适合处理向量、矩阵和其他多维数据结构。

  2. 数学函数:Numpy提供了许多常用的数学函数,如三角函数、指数函数、对数函数等。这些函数可以直接应用于整个数组,而无需编写循环。

  3. 广播(Broadcasting):Numpy支持不同形状的数组之间的运算,通过广播机制,可以对形状不同的数组进行逐元素的操作,而无需显式地编写循环。

  4. 线性代数运算:Numpy提供了丰富的线性代数运算函数,如矩阵乘法、求解线性方程组、特征值计算等。

  5. 随机数生成:Numpy包含了用于生成各种概率分布的随机数的函数,如均匀分布、正态分布、泊松分布等。

  6. 数据操作:Numpy提供了很多用于操作数组的函数,如切片、索引、排序、去重等。

        Numpy广泛应用于科学计算、数据分析、机器学习等领域。它的高效性和便捷性使得它成为Python数据科学生态系统中不可或缺的组成部分。

0、多维数组对象(ndarray)

        NumPy的ndarray对象是NumPy库中最重要的对象之一,也是进行科学计算的核心数据结构。ndarray代表了一个多维的数组,可以存储相同类型的元素。

多维数组的属性

  • ndarray.shape:返回表示数组形状的元组,例如(2, 3)表示2行3列的数组。
  • ndarray.dtype:返回数组中元素的数据类型,例如intfloatbool等。
  • ndarray.ndim:返回数组的维度数,例如1表示一维数组,2表示二维数组。

1、创建数组

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501

2、数组操作

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501

3、数组数学

【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132863360?spm=1001.2014.3001.5501

4、数组广播

        NumPy广播(Broadcast)是指在不同形状的数组之间进行运算的一种机制。它允许我们在不显式复制数据的情况下,对具有不同形状的数组进行逐元素的操作。广播可以使我们更方便地进行数组运算,提高代码的简洁性和效率。

在进行广播运算时,NumPy遵循一套严格的规则:

  •  数组维度不同时,将维度较小的数组进行扩展,使其与维度较大的数组具有相同的维度数。

  • 如果两个数组在某个维度上的形状相等,或其中一个数组在该维度上的形状为1,则认为它们在该维度上是兼容的。

  • 如果两个数组在所有维度上都是兼容的,它们可以一起进行广播。

  • 在广播中,沿着形状中为1的维度进行复制,以使两个数组具有相同的形状。 

        广播的过程是自动进行的,无需显式编写循环或复制数据。让我们通过一个具体的示例来说明广播的工作原理:

import numpy as np

# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])

# 进行广播运算
c = a + b
print(c)

        在这个例子中,数组a的形状是(3,),数组b的形状是(2, 3)。根据广播的规则,a的形状会被扩展为(2, 3),然后两个数组逐元素相加,得到结果数组c。输出结果如下:

[[ 5  7  9]
 [ 8 10 12]]

        通过广播,我们可以在不改变数组形状的情况下,对不同形状的数组进行逐元素的操作。这使得我们可以更灵活地处理数据,并编写更简洁的代码。需要注意的是,虽然广播可以方便地进行数组运算,但在某些情况下可能会引起歧义或错误的结果。因此,在使用广播时,建议仔细理解广播规则,并确保操作的正确性。

5、排序操作

1. np.sort() 函数

        该函数返回一个数组的排序副本

import numpy as np

a = np.array([3, 1, 4, 2, 5])

# 对数组进行排序
b = np.sort(a)
print(b)
# 输出: [1 2 3 4 5]

2. np.argsort() 函数

        该函数返回数组排序后的索引。

import numpy as np

a = np.array([3, 1, 4, 2, 5])

# 返回排序后的索引
indices = np.argsort(a)
print(indices)
# 输出: [1 3 0 2 4]

3. ndarray.sort() 方法

        该方法原地对数组进行排序,不返回副本。

import numpy as np

a = np.array([3, 1, 4, 2, 5])

# 原地对数组进行排序
a.sort()
print(a)
# 输出: [1 2 3 4 5]

4. 按列或行排序

        可以指定 axis 参数来按列或行对二维数组进行排序。

import numpy as np

a = np.array([[3, 1, 4], [2, 5, 0]])

# 按列排序
b = np.sort(a, axis=0)
print(b)
# 输出:
# [[2 1 0]
#  [3 5 4]]

# 按行排序
c = np.sort(a, axis=1)
print(c)
# 输出:
# [[1 3 4]
#  [0 2 5]]

5. np.lexsort() 函数

        该函数根据键的字典顺序对多个序列进行间接排序。

import numpy as np

a = np.array([[3, 1, 4], [2, 5, 0]])
names = np.array(['Tom', 'John'])

# 使用lexsort进行间接排序
indices = np.lexsort((names, a[:, 0]))
print(indices)
# 输出: [1 0]

sorted_data = a[indices]
print(sorted_data)
# 输出:
# [[2 5 0]
#  [3 1 4]]

6. np.partition() 函数

        该函数可以在数组中进行分区操作,将数组分割为满足指定条件的两个部分。分区后,左侧的元素都小于或等于右侧的元素,但它们之间的顺序是未定义的。

import numpy as np

a = np.array([3, 1, 4, 2, 5])

# 对数组进行分区
b = np.partition(a, 2)
print(b)
# 输出: [1 2 3 4 5]

7. np.argpartition() 函数

        该函数返回分区操作后的索引 

import numpy as np

a = np.array([3, 1, 4, 2, 5])

# 返回分区后的索引
indices = np.argpartition(a, 2)
print(indices)
# 输出: [1 3 0 2 4]

8. ndarray.argsort() 方法

        该方法返回数组排序后的索引,类似于 np.argsort() 函数。

import numpy as np

a = np.array([3, 1, 4, 2, 5])

# 返回排序后的索引
indices = a.argsort()
print(indices)
# 输出: [1 3 0 2 4]

9. np.searchsorted() 函数

        该函数用于在已排序的数组中查找指定元素应该插入的位置,以9.保持排序顺序。文章来源地址https://www.toymoban.com/news/detail-709747.html

import numpy as np

a = np.array([1, 3, 4, 4, 6])

# 查找元素应该插入的位置
index = np.searchsorted(a, 5)
print(index)
# 输出: 4

到了这里,关于【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习】 NumPy详解(三):数组数学(元素、数组、矩阵级别的各种运算)

    目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 1. 元素级别 a. 直接运算 b. 加法:np.add()函数 c. 减法:np.subtract()函数 d. 乘法:np.multiply()函数 e. 除法:np.divide()函数 f. 幂运算:np.power()函数 g. 取余与求商

    2024年02月03日
    浏览(31)
  • 【深度学习】Pytorch 系列教程(十二):PyTorch数据结构:4、数据集(Dataset)

             目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量(Tensor) 2、张量操作(Tensor Operations) 3、变量(Variable) 4、数据集(Dataset) 随机洗牌           ChatGPT:         PyTorch是一个开源的机器学习框架,广泛应用于深度学习领域。它提供了丰富

    2024年02月07日
    浏览(32)
  • 深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

    a.shape=(3,2);既数组h=3,w=2 a.shape=(2,3,2);这里第一个2表示axis=0维度上的,三维数组中3,2)数组的个数,这里表示两个(3,2)数组。 这里axis=0指代哪里是很重要的知识点。深度学习中经常压缩一个维度,axis=0。 numpy.squeeze()函数。 语法:numpy.squeeze(a,axis = None);作用是将shape维度为

    2024年01月18日
    浏览(32)
  • 【Python】Python进阶系列教程-- MongoDB(十二)

    往期回顾: Python进阶系列教程-- Python3 正则表达式(一) Python进阶系列教程-- Python3 CGI编程(二) Python进阶系列教程-- Python3 MySQL - mysql-connector 驱动(三) Python进阶系列教程-- Python3 MySQL 数据库连接 - PyMySQL 驱动 Python进阶系列教程-- Python3 网络编程(五) Python进阶系列教程

    2024年02月09日
    浏览(31)
  • NumPy 中数组拼接、合并详解

    将值添加到数组的末端,返回一个新的数组,而原数组不变。 参数 描述 arr : 类数组 输入的数组 values : 类数组 向数组 arr 添加的元素,需要与 arr 维度相同 axis : 整型 添加操作的方向轴,axis 取 0 表示沿竖直方向操作,axis 取 1 表示沿水平方向操作,若未提供 axis 值,在添加

    2024年01月19日
    浏览(31)
  • Python 数据分析入门教程:Numpy、Pandas、Matplotlib和Scikit-Learn详解

    NumPy是一个Python的科学计算基础模块,提供了多维数组和矩阵操作功能。 NumPy中的数组比Python自带的列表更适合进行数值计算和数据分析。 Pandas建立在NumPy之上,提供了更高级的数据分析功能。 Pandas中的DataFrame可以看成是一个二维表格,便于加载和分析数据。 Matplotlib可以用来绘

    2024年02月07日
    浏览(35)
  • (9)OpenCV深度学习系列教程——PyTorch入门

    作者:禅与计算机程序设计艺术 PyTorch是一个由Facebook开发的开源机器学习框架,它提供了一整套用于训练、评估和部署深度学习模型的工具和方法。随着深度学习在各个领域的应用越来越广泛,PyTorch作为一个成熟的框架已经成为机器学习研究人员的必备工具。本系列教程从

    2024年02月07日
    浏览(31)
  • 【Python Numpy】广播、数组的迭代

    在Python的科学计算领域,NumPy是一个强大的工具,它提供了用于操作多维数组的功能。广播(Broadcasting)是NumPy中的一个重要概念,它使得不同形状的数组之间的计算变得非常灵活和便捷。本文将介绍广播是什么,以及如何在NumPy中使用广播来进行数组计算。 在Python的科学计算

    2024年02月06日
    浏览(46)
  • Python Numpy入门基础(一)创建数组

    1- np.array() 参数众多,初学时只要关注基本用法。 元组、列表转换 内置函数 range() 数组副本copy,开辟一块新内存复制原数组 主要参数: dtype=     数组元素的数据类型,可选 copy=      对象是否需要复制,可选 order=     创建数组的样式,C为行方向,F为列方向,A为任意方

    2024年02月14日
    浏览(31)
  • Python Numpy入门基础(二)数组操作

    NumPy是Python中一个重要的数学运算库,它提供了了一组多维数组对象和一组用于操作这些数组的函数。以下是一些NumPy的主要特点: 多维数组对象:NumPy的核心是ndarray对象,它是一个多维数组对象,可以容纳任意数据类型。 矢量化操作:使用NumPy的函数,可以对整个数组进行

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包