Python中的list/tuple,numpy中的ndarrray與tensorflow中的tensor。
用python中list/tuple理解,僅僅是從內存角度理解一個序列數據,而非數學中標量,向量和張量。
從python內存角度理解,就是一個數值,長度為1,並且不是一個序列;
從numpy與tensorflow數學角度理解,就是一個標量,shape為(),其軸為0;
[1,2,3,4,5,6]
從python內存角度理解,就是1*6或者長度為6的一個序列;
從numpy與tensorflow數學角度理解,就是一維向量,並且是列向量,shape為(6,),其軸為1;注:一維向量,列向量,其軸為1,軸下標為0,表示第一個軸;
[[1,2,3], [4,5,6]]
從python內存角度理解,就是一個二維數組2*3,2列3行;注意:不管python還是numpy/tensorflow都是列在前,即一個向量默認為列向量;
從numpy/tensorflow數學角度理解,就是一個二維張量,shape為(2,3),其軸為2;注:二維向量,第一個軸為列,下標為0,第二個軸為行,下標為1;
例子:
import os, sys
import numpy
import tensorflow as tf
a = [[1,2,3],[4,5,6]]
b = tf.Variable(a, dtype=tf.float32)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
d1 = tf.reduce_mean(b)
d2 = tf.reduce_mean(b, 0)
d3 = tf.reduce_mean(b, 1)
sess.run([b, b[0,:], b[:, 0]])
# [array([[ 1., 2., 3.],
# [ 4., 5., 6.]], dtype=float32),
# array([ 1., 2., 3.], dtype=float32),
# array([ 1., 4.], dtype=float32)]
sess.run([d1, d2, d3])
# [3.5,
# array([ 2.5, 3.5, 4.5], dtype=float32),
# array([ 2., 5.], dtype=float32)]
注:
[b, b[i,:], b[:, i]]
b[i,:]: 表示b矩陣第一個軸(列),第i列對應所有元素;
b[:,i]: 表示b矩陣第二個軸(行),第i行對應所有元素;
d1=tf.reduce_mean(b): 表示對矩陣所有元素進行均值;
d2=tf.reduce_mean(b, 0):表示對矩陣進行第一個軸(列)方向上的投影,即每一行上的均值;
d3=tf.reduce_mean(b, 1):表示對矩陣進行第二個軸(行)方向上的投影,即每一列的均值;
查看這個網址:http://www.cnblogs.com/silence-tommy/p/6554986.html
這個網址上說的有問題:
tf.reduce_mean(x) ==> 2.5 #如果不指定第二個參數,那么就在所有的元素中取平均值
tf.reduce_mean(x, 0) ==> [2., 3.] #指定第二個參數為0,則第一維的元素取平均值,即每一列求平均值
tf.reduce_mean(x, 1) ==> [1.5, 3.5] #指定第二個參數為1,則第二維的元素取平均值,即每一行求平均值
這兩句下划線的標注,是錯誤的。顯然沒有理解對於矩陣軸的概念;
(不好意思,這個網址博主,僅僅是看到了,所以僅僅從開發角度分析了下,並非故意,敬請諒解!)