NumPy 使处理数组变得简单。

如果你使用 Python,了解 Python NumPy 的一些基础知识是值得的。它对于处理数组非常有用,因为它非常快速和高效。它还包含许多方法,使操作和执行数组上的数值运算变得简单。

Python 中有许多数据结构,包括列表、字典、Pandas DataFrames,当然还有 NumPy 数组。每种结构都有其优点,知道何时使用其中一种可以节省编写程序的时间和精力。

在本文中,我们将向您展示 Python NumPy 的基础知识,并解释它为何如此有用。我们将为您提供一些示例,帮助您入门,并为您提供使数据分析项目更高效的基础。如果您有兴趣了解有关 Python 数据科学的更多信息,请考虑参加专 为没有 IT 经验的完全初学者设计的 课程

为什么使用 NumPy?

NumPy 中的数组与列表等其他数据结构有许多相似之处。它们可以存储数值数据和字符串,它们是可变的,并且可以以类似的方式进行切片和索引。但是,列表不能像数组那样轻松地处理数值运算。

要将数组中的所有元素乘以 2,请使用 array*2 ,其中 array 是数组的名称。这称为矢量化。要对列表执行相同操作,需要 for 循环或列表推导,这两者都需要更多代码。此外,数组比列表快得多,并且它们消耗的内存要少得多,因为 NumPy 方法针对处理数组进行了高度优化。

Pandas 是另一个提供数据分析和可视化功能的不错的选择。Pandas 中的基本数据结构是 Series ,它类似于一维 NumPy 数组。但是,在执行数值计算时,NumPy 的速度更快、效率更高。有关使用 Pandas 的更多信息,请查看 本文 。我们还提供了一些关于 在 Pandas 中可视化时间序列数据 .

创建数组

NumPy 数组在创建时具有固定大小,并且元素必须具有相同的数据类型。这是创建数组时要牢记的两个主要约束。该 array() 函数包含以下参数:

numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)

为了简洁起见,我们不会详细描述所有参数。如果您对详细信息感兴趣,请查看文档 。 对于大多数应用程序,您只需要定义对象和可能的 dtype 参数。

要定义一维数组并打印其形状,请执行以下操作:

>>> import numpy as np
>>> ar = np.array([1, 2, 3, 4])
>>> print(ar.shape)
(4,)

对于 NumPy 多维数组, object 采用嵌套序列的形式,其中各个序列定义数组的行。例如:

>>> ar = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> print(ar.shape)
(2, 4)

NumPy 数组还可以保存不同的数据类型,例如整数、浮点数、字符串和布尔值。它甚至可以存储复数。我们可以将上面数组中的元素直接转换为字符串,如下所示:

>>> ar_string = ar.astype(str)
	>>> ar_string
	array([['1', '2', '3', '4'],
             ['5', '6', '7', '8']], dtype='

或者,我们可以 dtype=str 在定义数组时进行设置。可以按如下方式创建布尔值数组:

>>> np.array([[1, 1, 0, 0], [0, 1, 0, 1]], dtype=bool)
array([[True, True, False, False],
           [False, True, False, True]])

如果您想屏蔽另一个数组中的某些值,这可能会很有用。

有多种方法可以定义一个数组,其中任意值作为占位符,以便稍后填充实际数据。 numpy.ones() numpy.zeros() 函数分别创建一个用 1 和 0 填充的数组。

numpy.empty() 函数创建一个数组而不初始化条目。此特定函数要求用户手动设置数组中的所有值,应谨慎使用。但是,它可能比其他两个函数快一点。

要使用这些函数,需要指定数组的大小:

>>> np.zeros((3, 2))
array([[0., 0.],
       [0., 0.],
       [0., 0.]])

可以使用两个有用的 NumPy 函数定义具有固定序列的数组: arange linspace 。对于 arange ,您需要指定起始值和终止值以及步长。例如:

>>> np.arange(2, 20, 4)
array([ 2, 6, 10, 14, 18])

这类似于内置函数 range() ,可用于循环。有关 Python 中循环的更多详细信息, 本文 linspace 中的函数返回由起始值和终止值定义的间隔内均匀分布的数字。使用与上一个示例相同的参数可得出:

>>> np.linspace(2, 20, 4)
array([ 2., 8., 14., 20.])

此处,第三个参数定义要返回的值的数量,而不是像前一个示例中那样定义步长。要查看如何使用此函数为时间轴生成均匀分布的值的示例,请参阅 本文 。类似的函数 logspace 返回对数刻度上均匀分布的数字。尝试一下,看看会得到什么。

读取和写入 CSV

大多数情况下,您希望将文件中保存的数据读入 NumPy 数组。NumPy 附带一些函数来帮助加载和保存数组。这些函数专注于处理二进制数据或存储在文本文件中的数据。这两个函数 load() 提供 save() 将数组加载和保存到二进制文件的功能。

如果您正在使用文本文件(特别是 Python 中的 CSV),则读取和写入数组到文件的最佳方法是使用 loadtxt() 和 savetxt() 函数。后者有两个必需参数, fname X ,分别定义文件名和要保存的数组数据。要保存到 CSV,您还需要指定一个 delimiter 。为了演示这一点,让我们创建一个 2 x 4 数组,将其保存到 CSV,然后将其读回:

>>> ar = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> np.savetxt('output_array.csv', ar, delimiter=',')
>>> ar_read = np.loadtxt('output_array.csv', delimiter=',')
>>> ar_read
array([[1., 2., 3., 4.],
       [5., 6., 7., 8.]])

您也可以使用纯 Python 和内置 open() 函数。这里有 一篇 关于用 Python 写入文件的文章,向您展示了如何操作。如果您在 Python 中处理大量文件,这里有 一篇文章 ,其中有一些关于如何以编程方式重命名文件的提示。

一些 NumPy 数组方法

现在我们已经介绍了在 Python 中创建数组的方法,让我们看看你可以用它做什么。NumPy 有许多有用且高度优化的方法,可让你执行数组操作并获取有关数组的其他信息。

正如我们在介绍中提到的,对数组执行基本运算(例如 array1 + array2 乘以标量)非常简单。对于线性代数,有一些有效的函数,例如用于计算点积或叉积或对数组进行转置。

一个常见的需求是汇总数组的内容。NumPy 包含用于计算统计数据的函数,例如平均值、中位数、标准差等。这些函数很有用,因为它们允许您指定一个轴来计算统计数据。默认情况下,统计数据是在扁平数组上计算的。例如:

>>> ar = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> np.mean(ar)
4.5

>>> np.mean(ar, axis=0)
array([3., 4., 5., 6.])

>>> np.mean(ar, axis=1)
array([2.5, 6.5])

指定 axis=0 计算列的平均值,并 axis=1 计算行的平均值。现在我们知道如何生成汇总统计数据,我们可以找到行的平均值并将此信息附加到数组中的新列:

>>> row_mean = np.mean(ar, axis=1).reshape(2, 1)
>>> new_ar = np.append(ar, row_mean, axis=1)
>>> new_ar
array([[1., 2., 3., 4., 2.5],
       [5., 6., 7., 8., 6.5]])

在这里,我们计算统计数据,重塑它,然后使用附加函数将其添加为新列。请注意,整个数组的数据类型已更改,因为我们的汇总统计数据是浮点数。

继续使用 NumPy

NumPy 是 Python 数据分析的基础工具。它是一个成熟的库,拥有大量有用的函数和方法,并且以速度和效率为核心。现在您已经了解了 Python NumPy 的基础知识,您可以使用在这里学到的知识来提高项目的效率。

可视化数据是数据科学过程中的重要一步。我们有两篇文章( 第 1 部分 和 第 2 部分 )介绍了如何在 Python 中使用 Matplotlib 进行绘图。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部