zoukankan      html  css  js  c++  java
  • numpy.trace对于三维以上array的解析

    numpy.trace是求shape的对角线上的元素的和,具体看 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.trace.html

    或者搜索 numpy.trace, 二维的比较好理解,对于三维以上的对角线(三维的对角线不止2条,该选哪两条呢)就不好理解了,以下是本人的理解

    # 3-D array 的trace算法 
    
    import numpy as np
    
    a = np.arange(8).reshape((2,2,2))
    print 'a =',a
    
    print np.trace(a)
    
    x0 = a[0,0,0] + a[1,1,0]#即 0 + 6
    print 'a[1,1,0] =', a[1,1,0],';','x0 =',x0
    x1 = a[0,0,1] + a[1,1,1]#即 1 + 7
    print 'a[1,1,1] =', a[1,1,1],';','x1 =',x1
    
    #当然你可能认为6 = 2 + 4;或者 8 = 5 + 3,确实一个立方体应该是4条对角线,但是是不是都可以呢
    #请看下面的3-D
    b = np.array([ [ [100, 198],
                     [2, 3]],
                   [ [4, 5],
                    [6,7]]])
    print 'b =',b
    print np.trace(b)
    y0 = b[0,0,0] + b[1,1,0]#即 0 + 6
    print 'y0 = b[0,0,0] + b[1,1,0] = %d + %d = %d' % (b[0,0,0], b[1,1,0], y0)
    y1 = b[0,0,1] + b[1,1,1]#即 1 + 7
    print 'y1 = b[0,0,1] + b[1,1,1] = %d + %d = %d' % (b[0,0,1], b[1,1,1], y1)
    
    #事实证明只能是其中的固定方向的
    #之所以能以此种方式思考是因为2-D的直观
    
    c = np.array([[2, 8],
                 [4,5]])
    print 'c =', c
    print 'trace =', np.trace(c)
    trace_c = c[0,0] + c[1,1]
    print 'c[0,0] + c[1,1] = %d + %d = %d' % (c[0,0], c[1,1], trace_c)
    
    #来看看4-D的
    d = np.arange(32).reshape((2,2,2,4))
    print 'd =', d
    #猜猜看这个trace结果是什么shape,
    #(2, 4),只要去掉前面 2个维度即可
    print 'np.trace(d).shape =', np.trace(d).shape
    print 'np.trace(d) =', np.trace(d)
    td00 = d[0,0,0,0] + d[1,1,0,0]
    print 'td00 = ' + 'd[0,0,0,0] + d[1,1,0,0] = %d + %d = %d' % (d[0,0,0,0], d[1,1,0,0], td00)
    td01 = d[0,0,0,1] + d[1,1,0,1]
    print 'td01 = ' + 'd[0,0,0,1] + d[1,1,0,1] = %d + %d = %d' % (d[0,0,0,1], d[1,1,0,1], td01)
    td02 = d[0,0,0,2] + d[1,1,0,2]
    print 'td02 = ' + 'd[0,0,0,2] + d[1,1,0,2] = %d + %d = %d' % (d[0,0,0,2], d[1,1,0,2], td02)
    td03 = d[0,0,0,3] + d[1,1,0,3]
    print 'td03 = ' + 'd[0,0,0,3] + d[1,1,0,3] = %d + %d = %d' % (d[0,0,0,3], d[1,1,0,3], td03)
    
    print
    td10 = d[0,0,1,0] + d[1,1,1,0]
    print 'td10 = ' + 'd[0,0,1,0] + d[1,1,1,0] = %d + %d = %d' % (d[0,0,1,0], d[1,1,1,0], td10)
    td11 = d[0,0,1,1] + d[1,1,1,1]
    print 'td11 = ' + 'd[0,0,1,1] + d[1,1,1,1] = %d + %d = %d' % (d[0,0,1,1], d[1,1,1,1], td11)
    td12 = d[0,0,1,2] + d[1,1,1,2]
    print 'td12 = ' + 'd[0,0,1,2] + d[1,1,1,2] = %d + %d = %d' % (d[0,0,1,2], d[1,1,1,2], td12)
    td13 = d[0,0,1,3] + d[1,1,1,3]
    print 'td13 = ' + 'd[0,0,1,3] + d[1,1,1,3] = %d + %d = %d' % (d[0,0,1,3], d[1,1,1,3], td13)

    以下是运行结果:(python 2.7, numpy:1.14.2:

    a = [[[0 1]
      [2 3]]
    
     [[4 5]
      [6 7]]]
    [6 8]
    a[1,1,0] = 6 ; x0 = 6
    a[1,1,1] = 7 ; x1 = 8
    b = [[[100 198]
      [  2   3]]
    
     [[  4   5]
      [  6   7]]]
    [106 205]
    y0 = b[0,0,0] + b[1,1,0] = 100 + 6 = 106
    y1 = b[0,0,1] + b[1,1,1] = 198 + 7 = 205
    c = [[2 8]
     [4 5]]
    trace = 7
    c[0,0] + c[1,1] = 2 + 5 = 7
    d = [[[[ 0  1  2  3]
       [ 4  5  6  7]]
    
      [[ 8  9 10 11]
       [12 13 14 15]]]
    
    
     [[[16 17 18 19]
       [20 21 22 23]]
    
      [[24 25 26 27]
       [28 29 30 31]]]]
    np.trace(d).shape = (2, 4)
    np.trace(d) = [[24 26 28 30]
     [32 34 36 38]]
    td00 = d[0,0,0,0] + d[1,1,0,0] = 0 + 24 = 24
    td01 = d[0,0,0,1] + d[1,1,0,1] = 1 + 25 = 26
    td02 = d[0,0,0,2] + d[1,1,0,2] = 2 + 26 = 28
    td03 = d[0,0,0,3] + d[1,1,0,3] = 3 + 27 = 30
    
    td10 = d[0,0,1,0] + d[1,1,1,0] = 4 + 28 = 32
    td11 = d[0,0,1,1] + d[1,1,1,1] = 5 + 29 = 34
    td12 = d[0,0,1,2] + d[1,1,1,2] = 6 + 30 = 36
    td13 = d[0,0,1,3] + d[1,1,1,3] = 7 + 31 = 38
  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/mengshu-lbq/p/8615873.html
Copyright © 2011-2022 走看看