Python中NumPy数组的简明入门

数组是机器学习中使用的主要数据结构。

在 Python 中,NumPy 库中的数组,称为N 维数组或 ndarray,被用作表示数据的主要数据结构。

在本教程中,您将了解 NumPy 中的 N 维数组,用于在 Python 中表示数值和操作数据。

完成本教程后,您将了解:

  • 什么是 ndarray 以及如何在 Python 中创建和检查数组。
  • 用于创建新的空数组和带默认值的数组的关键函数。
  • 如何组合现有数组以创建新数组。

通过我的新书《机器学习线性代数启动您的项目,其中包括分步教程和所有示例的 Python 源代码文件。

让我们开始吧。

A Gentle Introduction to N-Dimensional Arrays in Python with NumPy

NumPy 在 Python 中 N 维数组简介
图片作者:patrickkavanagh,保留部分权利。

教程概述

本教程分为3个部分;它们是

  1. NumPy N 维数组
  2. 创建数组的函数
  3. 组合数组

在机器学习线性代数方面需要帮助吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

NumPy N 维数组

NumPy 是一个 Python 库,可用于科学和数值应用程序,也是进行线性代数操作的工具。

NumPy 中的主要数据结构是 ndarray,它是 N 维数组的缩写。在使用 NumPy 时,ndarray 中的数据简称为数组。

它是一个内存中固定大小的数组,包含相同类型的数据,例如整数或浮点值。

数组支持的数据类型可以通过数组上的“dtype”属性访问。数组的维度可以通过“shape”属性访问,该属性返回一个描述每个维度长度的元组。还有许多其他属性。在此处了解更多信息

从数据或简单的 Python 数据结构(如列表)创建数组的一种简单方法是使用 array() 函数。

下面的示例创建了一个包含 3 个浮点值的 Python 列表,然后从该列表创建了一个 ndarray,并访问了数组的形状和数据类型。

运行示例会打印 ndarray 的内容、形状(一个包含 3 个元素的一维数组)和数据类型(一个 64 位浮点数)。

创建数组的函数

还有更方便的函数用于创建固定大小的数组,您可能会遇到或需要使用这些函数。

让我们看几个。您可以在此处查看完整列表。

空数组

empty() 函数将创建指定形状的新数组。

该函数的参数是一个数组或元组,指定要创建的数组的每个维度的长度。创建的数组的值或内容将是随机的,需要在使用前进行赋值。

下面的示例创建了一个空的 3×3 二维数组。

运行示例会打印空数组的内容。您的特定数组内容会有所不同。

全零数组

zeros() 函数将创建一个指定大小的新数组,其内容填充为零值。

该函数的参数是一个数组或元组,指定要创建的数组的每个维度的长度。

下面的示例创建了一个 3×5 的零二维数组。

运行示例会打印创建的全零数组的内容。

全一数组

ones() 函数将创建一个指定大小的新数组,其内容填充为一值。

该函数的参数是一个数组或元组,指定要创建的数组的每个维度的长度。

下面的示例创建了一个包含 5 个元素的一维数组。

运行示例会打印创建的全一数组的内容。

组合数组

NumPy 提供了许多从现有数组创建新数组的函数。

让我们来看看您可能需要或遇到的两个最流行的函数。

垂直堆叠

给定两个或多个现有数组,您可以使用 vstack() 函数将它们垂直堆叠。

例如,给定两个一维数组,您可以通过垂直堆叠它们来创建一个新的二维数组,该数组具有两行。

这在下面的示例中进行了演示。

运行示例首先打印两个单独定义的一维数组。这些数组被垂直堆叠,形成一个新的 2×3 数组,其内容和形状也被打印出来。

水平堆叠

给定两个或多个现有数组,您可以使用 hstack() 函数将它们水平堆叠。

例如,给定两个一维数组,您可以创建一个新的、具有第一和第二数组列连接的一维数组或一行。

这在下面的示例中进行了演示。

运行示例首先打印两个单独定义的一维数组。然后,这些数组被水平堆叠,形成一个包含 6 个元素的新一维数组,其内容和形状也被打印出来。

扩展

本节列出了一些您可能希望探索的扩展本教程的想法。

  • 尝试使用不同的方式创建数组,调整大小或使用新数据。
  • 查找并开发 3 个用于创建数组的额外 NumPy 函数的示例。
  • 查找并开发 3 个用于组合数组的额外 NumPy 函数的示例。

如果您探索了这些扩展中的任何一个,我很想知道。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

书籍

参考文献

API

总结

在本教程中,您了解了 NumPy 中的 N 维数组,用于在 Python 中表示和操作数值数据。

具体来说,你学到了:

  • 什么是 ndarray 以及如何在 Python 中创建和检查数组。
  • 用于创建新的空数组和带默认值的数组的关键函数。
  • 如何组合现有数组以创建新数组。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握机器学习线性代数!

Linear Algebra for Machine Learning

建立对线性代数的工作理解

...通过在 python 中编写代码

在我的新电子书中探索如何实现
机器学习线性代数

它提供关于以下主题的自学教程
向量范数、矩阵乘法、张量、特征分解、SVD、PCA 等等...

最终理解数据的数学

跳过学术理论。只看结果。

查看内容

对《Python 中 NumPy 数组的温和介绍》的 21 条回复

  1. Klaas Brau 2018 年 2 月 2 日上午 6:12 #

    谢谢 Jason。张量乘法会是下一个吗?😉
    我其实一直想知道为什么一维数组的形状不是 (3,1) 而是 (3,)

    • Jason Brownlee 2018 年 2 月 2 日上午 8:24 #

      好问题。这确实与广播有关。我很快会有一篇关于这个主题的帖子。

  2. Vidyush Bakshi 2018 年 3 月 6 日上午 5:09 #

    解释得很好……期待更多!!!

  3. Kitan 2018 年 9 月 26 日上午 2:04 #

    嗨,Jason,
    感谢您的这篇文章,解释得很清楚。
    我是 numpy 的新手,我对为什么一维数组是 (3,) 而不是 (3,1) 感到有点困惑。您能给我指个方向吗,比如一篇文章或其他什么?

    • Jason Brownlee 2018 年 9 月 26 日上午 6:17 #

      因为 (3,1) 会是一个二维数组,因为它指定了两个维度。

      • Jonathan MacPherson 2018 年 10 月 13 日下午 1:07 #

        逻辑上,一维数组应该只是 (3),而不是 (3,)。那么 np.shape 缺少第二个值是否表示缺少第二个维度?我想知道为什么 np.shape 不会只返回 (3)。逗号似乎是我的困惑点。

        非常感谢您的时间!

  4. razan 2019 年 2 月 6 日上午 1:41 #

    如何将形状为 (5,7,10) 和 (5,7,12) 的两个 ndarray 连接起来,从而得到一个形状为 (5,7,22) 的数组?

    • Jason Brownlee 2019 年 2 月 6 日上午 7:47 #

      我不确定这是否有意义。

    • Alan Jones 2019 年 3 月 12 日上午 7:54 #

      嗨,Razan,

      这正是您想要的。

      a = numpy.random.random(size=(5,7,12))
      b = numpy.random.random(size=(5,7,10))
      c = numpy.concatenate([a,b], axis=2)

      祝好,

      艾伦。

  5. Vas 2019 年 3 月 20 日晚上 10:15 #

    如何将一维数组插入三维数组?

    • Jason Brownlee 2019 年 3 月 21 日上午 8:13 #

      这真的取决于在 3D 数组中的位置。

      通常,向一维数组添加额外的维度并使用 dstack/hstack/vstack 会得到您需要的结果。

  6. Rishi 2019 年 5 月 24 日上午 10:24 #

    对于使用数组的 Python 初学者来说,这是一个很棒的教程。

    只是想知道您是否可以就如何完成以下任务提供一些见解

    假设

    old_array = (size=(10,10))

    希望通过使用“old_array”中的元素并应用公式(例如 – cos(old_array[1,1]))来基于“old_array”创建一个新数组。

    谢谢

    • Jason Brownlee 2019 年 5 月 24 日下午 2:28 #

      您可以直接在数组和单个值之间执行减法。它将在数组上逐元素执行。

      这是您的意思吗?

  7. Jeff Lawrence 2020 年 7 月 30 日上午 12:39 #

    感谢您的非常有用的介绍……现在开始研究如何从一段声音文件中填充。
    你这个数字恐惧症患者
    杰夫

  8. steve 2021 年 10 月 22 日下午 12:08 #

    当您有一个一维 numpy 数组 (10,) 时。这是否意味着 10 行而没有列?我们如何从行和列的角度来思考一维 numpy 数组?

    • Adrian Tam
      Adrian Tam 2021 年 10 月 27 日上午 1:25 #

      在 numpy 中,(10,) 表示你有一个一维数组。如果你说行和列,你已经假定了一个二维数组。

      但通常当你将一维数组应用于二维数组时,你可以像向量和矩阵一样操作,并且向量的行/列方向有时会被 numpy 奇迹般地纠正,以使你的操作成功。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。