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

目录

一、前言

二、实验环境

三、NumPy

0、多维数组对象(ndarray)

[1. 多维数组的属性](#1. 多维数组的属性)

1、创建数组

2、数组操作

[1. 索引和切片](#1. 索引和切片)

[a. 索引](#a. 索引)

[b. 切片](#b. 切片)

[2. 形状操作](#2. 形状操作)

[a. 获取数组形状](#a. 获取数组形状)

[b. 改变数组形状](#b. 改变数组形状)

[c. 展平数组](#c. 展平数组)

[3. 转置操作](#3. 转置操作)

[a. 使用.T属性](#a. 使用.T属性)

[b. 使用transpose()函数](#b. 使用transpose()函数)

[4. 拼接操作](#4. 拼接操作)

np.concatenate()函数

np.vstack()函数

np.hstack()函数


一、前言

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

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

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

二、实验环境

|--------|--------|---|
| numpy | 1.21.6 | |
| python | 3.7.16 | |

  • 运行下述命令检查Python版本
bash 复制代码
 python --version 
  • 运行下述代码检查Python、NumPy版本
python 复制代码
import sys
import numpy as np

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

三、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博客https://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中第一行第二列的元素。
python 复制代码
import numpy as np

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

# 整数索引
print(arr[0])  # 输出:1

# 布尔索引
print(arr[arr > 3])  # 输出:[4, 5]

# 多维索引
arr = np.array([[1, 2, 3], [4, 5, 6]])
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中的最后一个元素。
python 复制代码
import numpy as np

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

# 基本切片
print(arr[1:4])  # 输出:[2, 3, 4]

# 步长切片
print(arr[1:5:2])  # 输出:[2, 4]

# 省略号切片
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[..., 1])  # 输出:[2, 5]

# 负数索引和切片
print(arr[-1])  # 输出:[4, 5, 6]

2. 形状操作

a. 获取数组形状

b. 改变数组形状

c. 展平数组

python 复制代码
import numpy as np

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

# 获取数组形状
print(arr.shape)  # 输出:(2, 3)

# 改变数组形状
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
# 输出:
# [[1 2]
#  [3 4]
#  [5 6]]

# 展平数组
flattened_arr = arr.flatten()
print(flattened_arr)  # 输出:[1 2 3 4 5 6]

3. 转置操作

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

a. 使用.T属性

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

python 复制代码
import numpy as np

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

输出:

python 复制代码
[[1 4]
[2 5]
[3 6]]

b. 使用transpose()函数

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

python 复制代码
import numpy as np

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

输出:

python 复制代码
[[1 4]
[2 5]
[3 6]]

4. 拼接操作

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

np.concatenate()函数

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

python 复制代码
import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

# 沿行方向拼接数组
concatenated_arr = np.concatenate((arr1, arr2), axis=0)
print(concatenated_arr)

输出:

python 复制代码
[[1 4]
[2 5]
[3 6]]

np.vstack()函数

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

python 复制代码
import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

# 垂直拼接数组
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr)

输出:

python 复制代码
[[1 4]
[2 5]
[3 6]]

np.hstack()函数

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

python 复制代码
import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

# 水平拼接数组
hstack_arr = np.hstack((arr1, arr2.T))

输出:

python 复制代码
[[1 2 5]
[3 4 6]]
相关推荐
zaim134 分钟前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
xiandong204 小时前
240929-CGAN条件生成对抗网络
图像处理·人工智能·深度学习·神经网络·生成对抗网络·计算机视觉
innutritious5 小时前
车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
人工智能·深度学习·计算机视觉
PythonFun5 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
醒了就刷牙5 小时前
56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
pytorch·深度学习·gru
炼丹师小米5 小时前
Ubuntu24.04.1系统下VideoMamba环境配置
python·环境配置·videomamba
橙子小哥的代码世界5 小时前
【深度学习】05-RNN循环神经网络-02- RNN循环神经网络的发展历史与演化趋势/LSTM/GRU/Transformer
人工智能·pytorch·rnn·深度学习·神经网络·lstm·transformer
GFCGUO5 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
985小水博一枚呀7 小时前
【深度学习基础模型】神经图灵机(Neural Turing Machines, NTM)详细理解并附实现代码。
人工智能·python·rnn·深度学习·lstm·ntm
SEU-WYL8 小时前
基于深度学习的任务序列中的快速适应
人工智能·深度学习