资讯专栏INFORMATION COLUMN

如何理解Axis?

huashiou / 637人阅读

摘要:一句话总结可以方便我们将数据进行不同维度的处理。一理解如果你像我一样,发现中有这个参数,但不知道是什么意思。一旦维数超过二维,就无法用简单的行和列来表示了。

前言
只有光头才能变强。

回顾前面:

从零开始学TensorFlow【01-搭建环境、HelloWorld篇】

什么是TensorFlow?

TensorFlow读写数据

不知道大家最开始接触到axis的时候是怎么样的,反正我是挺难理解的..我们可以发现TensorFlow的很多API都有axis这个参数,如果我们对axis不了解,压根不知道API是怎么搞的。

一句话总结axis:axis可以方便我们将数据进行不同维度的处理
一、理解axis

如果你像我一样,发现API中有axis这个参数,但不知道是什么意思。可能就会搜搜axis到底代表的什么意思。于是可能会类似搜到下面的信息:

使用0值表示沿着每一列或行标签索引值向下执行方法(axis=0代表往跨行)

使用1值表示沿着每一行或者列标签模向执行对应的方法(axis=1代表跨列)

但我们又知道,我们的数组不单单只有二维的,还有三维、四维等等。一旦维数超过二维,就无法用简单的行和列来表示了

所以,可以用我下面的方式进行理解:

axis=0将最开外头的括号去除,看成一个整体,在这个整体上进行运算

axis=1将第二个括号去除,看成一个整体,在这个整体上进行运算

...依次类推

话不多说,下面以例子说明~

1.1二维数组之concat

首先,我们来看个concat的例子,concat第一个参数接收val,第二个参数接收的是axis

def learn_concat():

    # 二维数组
    t1 = tf.constant([[1, 2, 3], [4, 5, 6]])
    t2 = tf.constant([[7, 8, 9], [10, 11, 12]])
    
    with tf.Session() as sess:
        
        # 二维数组针对 axis 为0 和 1 的情况
        print(sess.run(tf.concat([t1, t2], 0)))
        print(sess.run(tf.concat([t1, t2], 1)))

ok,下面以图示的方式来说明。现在我们有两个数组,分别是t1和t2:

首先,我们先看axis=0的情况,也就是tf.concat([t1, t2], 0)。从上面的描述,我们知道,先把第一个括号去除,然后将其子内容看成一个整体,在这个整体下进行想对应的运算(这里我们就是concat)。

所以最终的结果是:

[
    [1 2 3],
    [4 5 6],
    [7 8 9],
    [10 11 12]
]

接着,我们再看axis=1的情况,也就是tf.concat([t1, t2], 1)。从上面的描述,我们知道,先把第二个括号去除,然后将其子内容看成一个整体,在这个整体下进行想对应的运算(这里我们就是concat)。

所以最终的结果是:

[
    [1, 2, 3, 7, 8, 9]
    [4, 5, 6, 10, 11, 12]
]
1.2三维数组之concat

接下来我们看一下三维的情况

def learn_concat():

    # 三维数组    
    t3 = tf.constant([[[1, 2], [2, 3]], [[4, 4], [5, 3]]])
    t4 = tf.constant([[[7, 4], [8, 4]], [[2, 10], [15, 11]]])

    with tf.Session() as sess:

        # 三维数组针对 axis 为0 和 1 和 -1 的情况
        print(sess.run(tf.concat([t3, t4], 0)))
        print(sess.run(tf.concat([t3, t4], 1)))
        print(sess.run(tf.concat([t3, t4], -1)))

ok,下面也以图示的方式来说明。现在我们有两个数组,分别是t3和t4:

首先,我们先看axis=0的情况,也就是tf.concat([t3, t4], 0)。从上面的描述,我们知道,先把第一个括号去除,然后将其子内容看成一个整体,在这个整体下进行想对应的运算(这里我们就是concat)。

所以最终的结果是:

[
    [
        [1 2]
        [2 3]
    ]
    [
        [4 4]
        [5 3]
    ]
    [
        [7 4]
        [8 4]
    ]
    [
        [2 10]
        [15 11]
    ]
]

接着,我们再看axis=1的情况,也就是tf.concat([t3, t4], 1)。从上面的描述,我们知道,先把第二个括号去除,然后将其子内容看成一个整体,在这个整体下进行想对应的运算(这里我们就是concat)。

所以最终的结果是:

[
    [
        [1 2]
        [2 3]
        [7 4]
        [8 4]
    ]
    [
        [4 4]
        [5 3]
        [2 10]
        [15 11]
    ]
]

最后,我们来看一下axis=-1这种情况,在文档也有相关的介绍:

As in Python, the axis could also be negative numbers. Negative axis
are interpreted as counting from the end of the rank, i.e.,
axis + rank(values)-th dimension

所以,对于我们三维的数组而言,那axis=-1实际上就是axis=2,下面我们再来看一下这种情况:

最终的结果是:

[
 [
  [1 2 7 4]
  [2 3 8 4]
 ]
 [
  [4 4 2 10]
  [5 3 15 11]
 ]
]

除了concat以外,其实很多函数都用到了axis这个参数,再举个例子:

>>> item = np.array([[1,4,8],[2,3,5],[2,5,1],[1,10,7]])
>>> item
array([[1, 4, 8],
       [2, 3, 5],
       [2, 5, 1],
       [1, 10, 7]])

>>> item.sum(axis = 1)
array([13, 10,  8, 18])

>>> item.sum(axis = 0)
array([ 6, 22, 21])

参考资料:

有关axis/axes的理解

https://zhuanlan.zhihu.com/p/25761406

最后

下一篇是TensorBoard~

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

觉得我的文章写得不错,不妨点一下

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43460.html

相关文章

  • Python Pandas与Numpy中axis参数的二义性

    摘要:是程序员的好去处,本公众号将以为主题,开始一个系列,争取做到每周一篇,翻译并帮助学习者一起理解一些有代表性的案例。所以问题当中第一个列子代表沿着列水平方向计算均值,而第二个列子代表将对应的列标签们沿着水平的方向依次删掉。 Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的...

    glumes 评论0 收藏0
  • CSS Flexbox学习笔记

    摘要:本文记录了我在学习前端上的笔记,方便以后的复习和巩固。注意项目现在显示的宽度是他们的默认宽度。各行将会伸展以占用剩余的空间。在其它情况下,剩余空间被所有行平分,扩大各行的侧轴尺寸。这不会影响源代码。不要忘记了,默认情况下,项目的值为。 本文记录了我在学习前端上的笔记,方便以后的复习和巩固。 开始使用Flex 在父元素中的显式的设置displa...

    zzir 评论0 收藏0
  • d3.js 使用坐标轴

    摘要:本片记录坐标轴入门,使用版本如何实现坐标轴生成的坐标图是通过的路径元素元素组成的,如下图表示的是底部坐标轴不包括内部刻度,如下这部分通过描绘,在中称为容器则包括了和作为即线,即文字实现坐标轴主要步骤步骤主要如下创建比例尺创建坐标轴,是个函数 本片blog记录d3坐标轴入门,使用版本v5.9.2 SVG如何实现坐标轴 d3生成的坐标图是通过svg的path(路径)元素 + g + lin...

    Karuru 评论0 收藏0
  • New CSS Logical Properties! - The Next Step of CSS

    摘要:目前为止,支持类似这种多方向网站的最佳方式,依然是使用和变量。在英文网站,宽度属性用表示,高度属性用表示。在英文网站中更多常用于,它的值升级为代替。在英文网站中,物理属性与逻辑属性的表现是一致的。 原文链接:https://medium.com/@elad/new-... 原文作者:Elad Shechter 简介 在过去,大多数程序猿在思考布局时总是习惯于从上下左右的角度出发。这是...

    zhoutao 评论0 收藏0
  • flex-box 速记表

    启动 flex-box: 父元素设置 display: flex; 或 display:inline-flex; flex container: 父元素显示设置 display: flex flex item:flex container 中的子元素 flex 容器属性: flex-direction:控制 flex 元素沿着 main-axis 的排列方向 row:默认值,flex 元素沿...

    haoguo 评论0 收藏0

发表评论

0条评论

huashiou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<