如何理解Axis?

前言

只有光头才能变强。html

回顾前面:python

不知道你们最开始接触到axis的时候是怎么样的,反正我是挺难理解的..咱们能够发现TensorFlow的不少API都有axis这个参数,若是咱们对axis不了解,压根不知道API是怎么搞的。数组

一句话总结axis:axis能够方便咱们将数据进行不一样维度的处理函数

1、理解axis

若是你像我同样,发现API中有axis这个参数,但不知道是什么意思。可能就会搜搜axis到底表明的什么意思。因而可能会相似搜到下面的信息:spa

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

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

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

因此,能够用我下面的方式进行理解:htm

  • axis=0将最开外头的括号去除,当作一个总体,在这个总体上进行运算
  • axis=1将第二个括号去除,当作一个总体,在这个总体上进行运算
  • ...依次类推

话很少说,下面以例子说明~blog

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:

两个数组,t1和t2

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

二维数组 axis=0的concat操做

因此最终的结果是:

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

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

axis=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:

两个数组,t3和t4

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

axis=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)。

axis=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,下面咱们再来看一下这种状况:

axis=-1理解 三维数组 concat

最终的结果是:

[
 [
  [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])

参考资料:

最后

下一篇是TensorBoard~

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

帅的人都关注了

以为个人文章写得不错,不妨点一下

原文出处:https://www.cnblogs.com/Java3y/p/10609746.html

相关文章
相关标签/搜索