1. 程式人生 > >python/numpy/tensorflow中,對矩陣行列操作,下標是怎麽回事兒?

python/numpy/tensorflow中,對矩陣行列操作,下標是怎麽回事兒?

flow round mean 數據 ria lis .html 錯誤 表示

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,則第二維的元素取平均值,即每一行求平均值

這兩句下劃線的標註,是錯誤的。顯然沒有理解對於矩陣軸的概念;

(不好意思,這個網址博主,僅僅是看到了,所以僅僅從開發角度分析了下,並非故意,敬請諒解!)

python/numpy/tensorflow中,對矩陣行列操作,下標是怎麽回事兒?