轻松入门 NumPy(二):数组的升维降维操作

目录

引言

一. 数组的维度、形状和轴

1.1 数组的维度(Dimensions)

1.2 数组的形状(Shape)

1.3 数组的轴(Axes)

二. 数组的升维(Dimensionality Expansion)

2.1 升维的操作方法

2.2 升维的实际应用

三. 数组的降维(Dimensionality Reduction)

3.1 降维的操作方法

1.使用 reshape() 降维

2.flatten()方法

3.2 降维的实际应用

四. 总结


引言


在之前的章节中,我们讨论了如何安装 NumPy 库,以及如何高效地创建数组。NumPy 是 Python 中用于科学计算的重要库,掌握它是进行数据分析、机器学习、计算机视觉等领域的基础。本节将重点讲解数组的维度概念以及如何进行数组的升维与降维操作,帮助你更好地理解 NumPy 数组的核心特性。
对于数据分析与处理,维度(维数)、形状和轴是理解数据结构的关键概念。掌握了这些概念后,你将能够更加灵活地操作和分析数据,特别是在处理高维数据时,如图像数据和机器学习中的特征数据。我们将从这些概念开始,逐步深入到升维和降维的实际操作中。

一. 数组的维度、形状和轴


1.1 数组的维度(Dimensions)


在 NumPy 中,维度(Dimension)是数组的核心特性之一。它指的是数组的轴数,即数据在多维空间中的排列方式。可以把数组的维度理解为数据的“层数”或者“深度”。维度的高低直接影响着数组的结构复杂度。例如:

1.1D 数组:只有一个轴,像一条简单的数字线,称为一维数组。它由一个连续的一维数据组成,形状为(n,)。
2.2D 数组:有两个轴,类似于矩阵,由行和列组成,形状为 (m, n)。
3.3D 数组:有三个轴,形状为 (p, m, n),即有多个二维数组按层次堆叠起来。此时,数据拥有更复杂的结构。我们可以通过 ndim 属性来查看数组的维度。例如:

import numpy as np

# 一维数组
array_1d = np.array([1, 2, 3, 4, 5])
print("一维数组维度:", array_1d.ndim)

# 二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组维度:", array_2d.ndim)

输出:

一维数组维度: 1
二维数组维度: 2

1.2 数组的形状(Shape)


数组的形状指的是数组的维度大小,即每个轴的大小。你可以通过 shape 属性获取数组的形状,返回的是一个表示每个轴长度的元组。比如,对于一个二维数组,shape 属性将返回一个形如 (m, n) 的元组,表示它有 m 行和 n 列。

import numpy as np

# 创建二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("数组形状:", array_2d.shape)

输出:

数组形状: (2, 3)

这表示 array_2d 是一个 2 行 3 列的二维数组。

对于 3D 数组,形状可能是 (p, m, n),表示有 p 层,每层是 m 行 n 列。

1.3 数组的轴(Axes)



数组的轴是与维度密切相关的概念。每一个维度都对应着一个轴。对于一维数组,只有一个轴;对于二维数组,通常有两个轴——一个表示行,另一个表示列;对于三维数组,轴数则为三,分别表示深度、行和列。
NumPy 中的轴是从 0 开始索引的。例如:

1.对于一维数组,轴 0 表示整个数组。
2.对于二维数组,轴 0 表示行,轴 1 表示列。
3.对于三维数组,轴 0 表示深度,轴 1 表示行,轴 2 表示列。

你可以通过 ndarray.shape 属性来查看每个轴的长度,通过 ndarray.ndim 来查看数组的轴数(即维度)。下面是一个简单的示例,展示如何查看轴的长度:

import numpy as np

# 创建三维数组
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("三维数组的形状:", array_3d.shape)
print("三维数组的维度:", array_3d.ndim)

输出:

三维数组的形状: (2, 2, 2)
三维数组的维度: 3


二. 数组的升维(Dimensionality Expansion)


升维是将数组从低维空间扩展到高维空间。在 NumPy 中,升维操作通常通过 np.newaxis 或 reshape() 方法来实现。升维有助于将数据格式转变为适合特定操作的形状,特别是在深度学习和图像处理中的应用。


2.1 升维的操作方法

reshape() 方法是一种常用的升维方式,它可以将数组转变为任何你想要的形状。
用法:array.reshape(new_shape)
参数:new_shape 是目标形状,必须与原数组的元素数量相匹配。例如,如果原数组有 6 个元素,则目标形状的元素总数也必须是 6。
返回值:返回一个新的数组,形状为 new_shape

import numpy as np

# 一维数组
array_1d = np.array([1, 2, 3, 4, 5])

# 使用 reshape 升维为三维数组
array_3d = array_1d.reshape(1, 1, 5)
print("升维后的数组形状:", array_3d.shape)

输出:

升维后的数组形状: (1, 1, 5)

通过 reshape(1, 1, 5),我们把原本的一维数组转换成了一个 3D 数组,形状为 (1, 1, 5)。

2.2 升维的实际应用


在深度学习中,升维操作非常重要。例如,在卷积神经网络(CNN)中,通常需要对输入数据进行升维,使得输入的图像数据变成符合模型需求的格式。假设我们有一张 28x28 的灰度图像,它是一个二维数组,但卷积神经网络的输入需要是一个 4D 数组,形状为 (batch_size, height, width, channels),其中 batch_size 是一次处理的样本数,height 和 width 是图像的大小,channels 是颜色通道数。因此,我们需要对图像进行升维操作,增加维度以匹配 CNN 的输入要求。读者可以在各大平台(如CSDN,GitHub)上搜寻具体的案例。

三. 数组的降维(Dimensionality Reduction)


降维是将数组从高维空间降到低维空间。在实际数据处理中,降维通常用于简化数据结构、减少计算复杂度或提高模型性能。


3.1 降维的操作方法


1.使用 reshape() 降维


降维操作可以通过 reshape() 来实现,它可以将高维数组转换为低维数组。例如,我们可以将一个二维数组展平成一维数组。

import numpy as np

# 创建二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 reshape 降维为一维
array_1d = array_2d.reshape(-1)
print("降维后的数组形状:", array_1d.shape)

输出:

降维后的数组形状: (6,)

通过 reshape(-1),我们将二维数组 array_2d 转换为一维数组 array_1d,新的数组形状变为 (6,)。
使用 flatten() 降维

2.flatten()方法

flatten() 方法也可以用来将数组展平为一维数组,它返回一个新的数组,并不改变原数组。
用法:array.flatten()
返回值:返回一个展平的一维数组,原数组不变。

import numpy as np

# 创建二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 flatten 降维为一维
array_flatten = array_2d.flatten()
print("降维后的数组形状:", array_flatten.shape)

输出:

降维后的数组形状: (6,)

3.2 降维的实际应用


降维在机器学习中有着广泛的应用。比如在特征选择、主成分分析(PCA)等数据降维技术中,降维可以帮助减少数据的冗余性,并提高算法的性能。在处理大规模数据集时,降维还能够显著减小计算量。
例如,PCA 是一种常用的降维方法,它可以将高维数据映射到低维空间,去除数据中的冗余信息,从而提升计算效率并减少过拟合的风险。

感兴趣的读者可以在各个平台找具体案例阅读借鉴。


四. 总结


通过本节的学习,我们了解了数组的维度、形状和轴等概念,并深入探讨了如何进行数组的升维与降维操作。升维和降维是数据预处理中的常见操作,尤其在深度学习、机器学习以及计算机视觉中具有重要意义。
升维操作使我们能够将一维数据扩展为多维数据,从而满足神经网络等模型的需求,而降维操作则帮助我们简化数据结构,提高计算效率。在实际工作中,根据任务需求灵活地进行升维和降维操作,将大大提升我们处理数据的能力。

掌握这些操作,能够帮助我们高效地处理和分析数据,使得数据能够适应不同的计算任务。

如果你觉得本文对你有帮助,欢迎点赞收藏,也欢迎在评论区交流你遇到的用numpy库中的方法处理python数组维度的问题。



 

你可能感兴趣的:(numpy)