对Numpy中轴(axes)的解释(汉化版)

  • 从困惑到解惑
  • 当你困惑时,甚至需要颠覆世界观,原本的知识体系造成的理所当然的直觉恰恰相反,像骑了一个往前蹬却往后走的自行车一样别扭难受--反直觉(Counter Intuitive)
  • 找到一个完美教程非常难得
  • 逐字不差的阅读且逐字不差的翻译
  • 借助翻译软件(节省时间打字)
  • 学好数据分析,得学好Numpy;学好Numpy,首先彻底理解“轴”的概念
阅读原文:

NUMPY AXES EXPLAINED

解释Numpy轴(axes)

本教程将介绍NumPy轴。

它将解释NumPy轴是什么。本教程还将解释轴如何工作,以及我们如何将它们与NumPy函数一起使用。

在我详细解释NumPy轴之前,让我先解释为什么NumPy轴存在问题。

NUMPY AXES很难理解

坦白来说。

NumPy轴是NumPy系统中最难理解的事情之一。如果您刚刚开始使用NumPy,则尤其如此。许多初学者都很难理解NumPy轴的工作原理。

别担心,不是你。许多Python数据科学初学者都在努力解决这个问题。

话虽如此,本教程将解释您需要了解的有关NumPy数组中的轴的所有基本知识。

让我们从基础开始。通过将NumPy轴连接到您已经知道的东西,我将使NumPy轴更容易理解。

NUMPY AXES类似于在坐标系中的轴

如果您正在阅读这篇博文,那么您可能需要参加几门数学课程。

当你第一次学习图形时,回想一下早期的数学。您了解了笛卡尔坐标。

NumPy轴与笛卡尔坐标系中的轴非常相似。

类比:笛卡尔坐标系坐标轴

简单的二维笛卡尔坐标系具有两个轴,即x轴和y轴。
这些轴基本上只是笛卡尔空间中的方向(正交方向)。
此外,我们可以通过它沿每个轴的位置来识别笛卡尔空间中点的位置。


image.png

NUMPY 的轴是行和列的方向

就像坐标系一样,NumPy阵列也有轴。


image.png

在二维NumPy数组中,轴是沿行和列的方向。

AXIS 0是沿着行的方向

假设我们讨论的是多维数组,那么轴0就是向下行的轴。


image.png

请记住,这确实适用于二维数组和多维数组。一维数组是一个特例,我将在本教程的后面解释。

AXIS 1是沿着列的方向

在多维NumPy阵列中,axis1是第2轴。当我们谈论二维和多维数组时,axis1是横跨列水平延伸的轴。


image.png

再一次,请记住,一维数组的工作方式略有不同。从技术上讲,1-d阵列没有轴1.我将在本教程后面详细解释。

NUMPY ARRAY AXES以'0'开头

在这一点上可能很明显,但我应该指出NumPy中的数组轴是编号的。

重要的是,它们从0开始编号。

这就像Python序列的索引值一样。在Python序列中 - 如列表和元组 - 序列中的值具有与之关联的索引。

所以,假设我们有一个带有几个大写字母的Python列表:

alpha_list = ['A','B','C','D']

如果我们检索第一个项目的索引值('A')......

alpha_list.index('A')

......我们发现'A'位于索引位置0。

这里,A是列表中的第一项,但索引位置为0。

基本上所有的Python序列都是这样的。在任何Python序列中 - 如列表,元组或字符串 - 索引从0开始。

NumPy轴的编号基本上以相同的方式工作。它们从0开始编号。因此“第一”轴实际上是“axis0”。“第二”轴是“axis1”,依此类推。

Numpy数组中轴的结构是重要的

在下一节中,我将向您展示如何在NumPy中使用NumPy轴的示例,但在我向您展示之前,您需要记住NumPy数组的结构很重要。

我刚才解释的细节,关于轴编号,以及哪个轴将影响您对我们使用的NumPy函数的理解。话虽如此,在继续讨论示例之前,请确保您真正理解我上面解释的有关Numpy轴的细节。

如果您有任何疑问或者您仍然对NumPy轴感到困惑,请在页面底部的注释中留下问题。

好。现在,让我们继续讨论这些例子。

关于如何使用NUMPY轴的示例

既然我们已经解释了NumPy轴的工作原理,那么让我们看一下NumPy轴如何使用的一些具体例子。

这些示例很重要,因为它们有助于培养您对NumPy轴在与NumPy函数一起使用时如何工作的直觉

这尼玛也太多了!还是挑重点把!!!

建议:注意轴参数控制的内容

要了解如何在NumPy函数中使用axis参数,了解axis参数实际控制每个函数的内容非常重要。

这听起来并不总是那么简单。例如,在np.sum()函数中,axis参数的行为方式很多人认为是反直觉的。

我将在一分钟内解释它是如何工作的,但我需要强调这一点:非常注意axis参数实际控制每个函数的内容

NUMPY SUM

在尝试理解NumPy sum中的axis时,您需要知道axis参数实际控制的是什么。
在np.sum()中,axis参数控制将聚合哪个轴
换句话说,axis参数控制哪个轴将被折叠
请记住,sum(),mean(),min(),median()和其他统计函数等函数会聚合您的数据。
为了解释“聚合”的含义,我将举一个简单的例子。
想象一下,你有一组5个数字。如果总结这5个数字,结果将是一个数字。求和有效地汇总了您的数据。它将大量的值折叠为单个值。

类似地,当您在带有axis参数的二维数组上使用np.sum()时,它会将二维数组折叠为一维数组。它会折叠数据减少维度

但哪个轴会被折叠?

将NumPy和函数与axis参数一起使用时,指定的轴是折叠的轴

NUMPY SUM WITH AXIS = 0

在这里,我们将使用轴= 0的NumPy和函数。

创建一个简单的NumPy数组。

np_array_2d = np.arange(0, 6).reshape([2,3])

print(np_array_2d)

[[0 1 2] 
 [3 4 5]]

接下来,让我们使用axis= 0的NumPy求和函数sum。

np.sum(np_array_2d, axis = 0)

输出:array([3, 5, 7])

当我们设置axis = 0时,该函数实际上对列进行求和。结果是一个新的NumPy数组,其中包含每列的总和。为什么?轴0不是指行吗?

这让许多初学者感到困惑,所以让我解释一下。

正如我之前提到的,axis参数指示哪个轴折叠。


image.png

因此,当我们设置axis = 0时,我们不会对行进行求和。当我们设置axis = 0时,我们正在聚合数据,以便我们折叠行......我们将轴0折叠。

AXIS = 1的NUMPY SUM
print(np_array_2d)

[[0 1 2]
 [3 4 5]]

np.sum(np_array_2d, axis = 1)

array([3, 12])

同样,使用sum()函数,axis参数设置在求和过程中折叠的轴。


image.png

代码具有跨列求和的效果。它折叠了axis1。

NUMPY CONCATENATE

现在让我们来看一个不同的例子。

在这里,我们将在使用NumPy连接函数(np.concatenate())的上下文中使用axis参数。

当我们将axis参数与np.concatenate()函数一起使用时,axis参数定义了我们堆叠数组的轴。

看例子:

np_array_1s = np.array([[1,1,1],[1,1,1]])
np_array_9s = np.array([[9,9,9],[9,9,9]])

array([[1, 1, 1],
       [1, 1, 1]])

array([[9, 9, 9],
       [9, 9, 9]])

#*use NumPy concatenate with axis = 0*
np.concatenate([np_array_1s, np_array_9s], axis = 0)
#输出
array([[1, 1, 1],
       [1, 1, 1],
       [9, 9, 9],
       [9, 9, 9]])

让我们仔细评估语法在这里做了什么。


image.png
#*use NumPy concatenate with axis = 1*
np.concatenate([np_array_1s, np_array_9s], axis = 1)
#输出
array([[1, 1, 1, 9, 9, 9],
       [1, 1, 1, 9, 9, 9]])

但是,让我们快速回顾一下这里发生了什么。


image.png

警告:1维阵列的工作方式不同

希望这个NumPy轴教程可以帮助您了解NumPy轴的工作原理。
但在我结束教程之前,我想给你一个警告:一维数组的工作方式不同!

一维NUMPY数组只有一个轴(即axis=0)
image.png
示例:连接1-D阵列(一维数组)
np_array_1s_1dim = np.array([1,1,1])
np_array_9s_1dim = np.array([9,9,9])

[1 1 1]
[9 9 9]

np.concatenate([np_array_1s_1dim, np_array_9s_1dim], axis = 0)

array([1, 1, 1, 9, 9, 9])

这个输出让许多初学者感到困惑。数组水平连接在一起。

这与函数在二维数组上的工作方式不同。如果我们在二维数组上使用np.concatenate()和axis = 0,则数组将垂直连接在一起。

在这种情况下,该功能正常工作。NumPy连接是沿着轴0连接这些数组。问题是在1-d数组中,轴0不像在2维数组中那样指向“向下”。

示例:连接1-D阵列时的报错,AXIS = 1
np.concatenate([np_array_1s_1dim, np_array_9s_1dim], axis = 1)

IndexError: axis 1 out of bounds [0, 1)

一位数组只有一个轴。

总结:

  • 将NumPy轴视为我们可以执行操作的方向。
  • 将NumPy轴视为我们可以执行操作的方向。
  • 将NumPy轴视为我们可以执行操作的方向。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,122评论 0 18
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,228评论 0 5
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,573评论 1 13
  • 一、numpy概述 numpy(Numerical Python)提供了python对多维数组对象的支持:ndar...
    L_steven的猫阅读 3,463评论 1 24
  • 前言 numpy是支持 Python语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,nu...
    TensorFlow开发者阅读 3,210评论 0 35