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


 

 

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM