• 【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)


    目录

    一、前言

    二、实验环境

    三、NumPy

    0、多维数组对象(ndarray)

    1. 多维数组的属性

    1、创建数组

    2、数组操作

    1. 索引和切片

    a. 索引

    b. 切片

    2. 形状操作

    a. 获取数组形状

    b. 改变数组形状

    c. 展平数组

    3. 转置操作

    a. 使用.T属性

    b. 使用transpose()函数

    4. 拼接操作

    np.concatenate()函数

    np.vstack()函数

    np.hstack()函数


    一、前言

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

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

    • Python:基本数据类型、容器(列表、元组、集合、字典)、函数、类
    • Numpy:数组、索引和切片、数组数学、广播
    • Matplotlib:绘图,子图,图像
    • IPython:创建笔记本,典型工作流程

    二、实验环境

    numpy1.21.6
    python3.7.16
    • 运行下述命令检查Python版本
     python --version 
    • 运行下述代码检查Python、NumPy版本
    1. import sys
    2. import numpy as np
    3. print("Python 版本:", sys.version)
    4. print("NumPy 版本:", np.__version__)

    e5f0435721dc4ccd82861b4119fedc4f.png

    三、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代表了一个多维的数组,可以存储相同类型的元素。

    1. 多维数组的属性

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

    1、创建数组

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

    2、数组操作

    1. 索引和切片

    • a. 索引

      • 使用整数索引:可以使用整数索引访问数组中的特定元素。例如,arr[0]将返回数组arr中的第一个元素。
      • 使用布尔索引:可以使用布尔数组作为索引来选择满足特定条件的元素。例如,arr[arr > 5]将返回数组arr中大于5的元素。
      • 使用多维索引:对于多维数组,可以使用多个整数或布尔索引来访问特定的元素。例如,arr[0, 1]将返回多维数组arr中第一行第二列的元素。
    1. import numpy as np
    2. arr = np.array([1, 2, 3, 4, 5])
    3. # 整数索引
    4. print(arr[0]) # 输出:1
    5. # 布尔索引
    6. print(arr[arr > 3]) # 输出:[4, 5]
    7. # 多维索引
    8. arr = np.array([[1, 2, 3], [4, 5, 6]])
    9. print(arr[0, 1]) # 输出:2

    • b. 切片

      • 使用基本切片:可以使用基本切片表示法从数组中获取连续的子数组。例如,arr[1:5]将返回数组arr中索引为1到4的元素。
      • 使用步长切片:可以使用步长切片表示法从数组中获取间隔的子数组。例如,arr[1:5:2]将返回数组arr中索引为1、3的元素。
      • 使用省略号切片:对于多维数组,可以使用省略号(...)表示连续的切片。例如,arr[..., 1]将返回多维数组arr中的第二列。
      • 使用负数索引和切片:可以使用负数索引和切片来从数组的末尾开始访问元素。例如,arr[-1]将返回数组arr中的最后一个元素。
    1. import numpy as np
    2. arr = np.array([1, 2, 3, 4, 5])
    3. # 基本切片
    4. print(arr[1:4]) # 输出:[2, 3, 4]
    5. # 步长切片
    6. print(arr[1:5:2]) # 输出:[2, 4]
    7. # 省略号切片
    8. arr = np.array([[1, 2, 3], [4, 5, 6]])
    9. print(arr[..., 1]) # 输出:[2, 5]
    10. # 负数索引和切片
    11. print(arr[-1]) # 输出:[4, 5, 6]

    2. 形状操作

    a. 获取数组形状

    b. 改变数组形状

    c. 展平数组

    1. import numpy as np
    2. arr = np.array([[1, 2, 3], [4, 5, 6]])
    3. # 获取数组形状
    4. print(arr.shape) # 输出:(2, 3)
    5. # 改变数组形状
    6. reshaped_arr = arr.reshape((3, 2))
    7. print(reshaped_arr)
    8. # 输出:
    9. # [[1 2]
    10. # [3 4]
    11. # [5 6]]
    12. # 展平数组
    13. flattened_arr = arr.flatten()
    14. print(flattened_arr) # 输出:[1 2 3 4 5 6]

    3. 转置操作

            数组转置操作是指将数组的行和列互换的操作,转置操作对于处理二维数组特别有用,例如在矩阵运算和线性代数中经常需要对数组进行转置。

    a. 使用.T属性

            在NumPy中,多维数组对象(ndarray)具有一个名为.T的属性,可以用于进行转置操作。该属性返回原始数组的转置结果,即行变为列,列变为行。

    1. import numpy as np
    2. arr = np.array([[1, 2, 3], [4, 5, 6]])
    3. transposed_arr = arr.T
    4. print(transposed_arr)

    输出:

    1. [[1 4]
    2. [2 5]
    3. [3 6]]

    b. 使用transpose()函数

            另一种实现数组转置的方法是使用np.transpose()函数。该函数接受一个多维数组作为参数,并返回其转置结果。

    1. import numpy as np
    2. arr = np.array([[1, 2, 3], [4, 5, 6]])
    3. transposed_arr = np.transpose(arr)
    4. print(transposed_arr)

    输出:

    1. [[1 4]
    2. [2 5]
    3. [3 6]]

    4. 拼接操作

            数组拼接操作是指将多个数组按照指定的方式进行连接的操作。

    np.concatenate()函数

            np.concatenate()函数用于沿指定的轴连接数组。可以沿着现有的轴连接两个或多个数组,也可以指定axis参数来创建一个新的轴。np.concatenate()`函数将`arr1`和`arr2`沿着行方向(`axis=0`)进行了拼接:

    1. import numpy as np
    2. arr1 = np.array([[1, 2], [3, 4]])
    3. arr2 = np.array([[5, 6]])
    4. # 沿行方向拼接数组
    5. concatenated_arr = np.concatenate((arr1, arr2), axis=0)
    6. print(concatenated_arr)

     输出:

    1. [[1 4]
    2. [2 5]
    3. [3 6]]

    np.vstack()函数

            np.vstack()函数用于垂直拼接(按行堆叠)两个或多个数组。它将输入的数组沿着垂直方向堆叠起来,生成一个新的数组。

    1. import numpy as np
    2. arr1 = np.array([[1, 2], [3, 4]])
    3. arr2 = np.array([[5, 6]])
    4. # 垂直拼接数组
    5. vstack_arr = np.vstack((arr1, arr2))
    6. print(vstack_arr)

    输出:

    1. [[1 4]
    2. [2 5]
    3. [3 6]]

    np.hstack()函数

            np.hstack()函数用于水平拼接(按列堆叠)两个或多个数组。它将输入的数组沿着水平方向堆叠起来,生成一个新的数组。

    1. import numpy as np
    2. arr1 = np.array([[1, 2], [3, 4]])
    3. arr2 = np.array([[5, 6]])
    4. # 水平拼接数组
    5. hstack_arr = np.hstack((arr1, arr2.T))

    输出:

    1. [[1 2 5]
    2. [3 4 6]]

  • 相关阅读:
    Java 面试常遇到的3道题,你知道答案吗?
    自定义线程实现c++代码回调run方法
    UDP协议深度解析:从原理到应用全面剖析
    SQLAlchemy学习-6.Column 设置字段一些参数配置
    三年经验前端vue面试记录
    【网络安全】跨站脚本攻击(XSS)
    JS判断类型(typeof+constructor+toString)
    【owt】owt-client-native-p2p-e2e-test vs2017构建 5 : 禁用MSDK
    C/C++字符串和数组基本操作demo
    superset study day01 (本地启动superset项目)
  • 原文地址:https://blog.csdn.net/m0_63834988/article/details/132830547