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

numpy.trace对于三维以上array的解析的更多相关文章

  1. 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示

    使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  2. Python与线性代数——Numpy中的matrix()和array()的区别

    Numpy中matrix必须是2维的,但是 numpy中array可以是多维的(1D,2D,3D····ND).matrix是array的一个小的分支,包含于array.所以matrix 拥有arra ...

  3. Numpy系列(一)- array

    初始Numpy 一.什么是Numpy? 简单来说,Numpy 是 Python 的一个科学计算包,包含了多维数组以及多维数组的操作. Numpy 的核心是 ndarray 对象,这个对象封装了同质数据 ...

  4. numpy中的matrix与array的区别

    Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array ...

  5. numpy中 array数组的shape属性

    numpy.array 的shape属性理解 在码最邻近算法(K-Nearest Neighbor)的过程中,发现示例使用了numpy的array数组管理,其中关于array数组的shape(状态)属 ...

  6. python 中 numpy array 中的维度

    简介 numpy 创建的数组都有一个shape属性,它是一个元组,返回各个维度的维数.有时候我们可能需要知道某一维的特定维数. 二维情况 >>> import numpy as np ...

  7. 创建 numpy.array

    # 导包 import numpy as np numpy.array nparr = np.array([i for i in range(10)]) nparr # array([0, 1, 2, ...

  8. 【python】numpy array特殊数据统一处理

    array中的某些数据坏掉,想要统一处理,找到了这个方法,做个笔记. 比如,把数组中所有小于0的数字置为0 import numpy as np t = np.array([-2, -1, 0, 1, ...

  9. numpy的array合并-【老鱼学numpy】

    概述 本节主要讲述如何把两个数组按照行或列进行合并. 按行进行上下合并 例如: import numpy as np a = np.array([1, 1, 1]) b = np.array([2, ...

随机推荐

  1. setting-url配置

    参考:  diango1 一.  mvc和mvt模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负 ...

  2. appium---第三个脚本,进入评论页,发表评论

    #进入编辑页,点击编辑框,固定光标 #com.xxx.xxx:id/edit__content drive.find_element_by_id('/edit_content').click(); t ...

  3. asp grid 增加和删除行数据

    <table border="0" cellpadding="0" cellspacing="0" style="width ...

  4. liunx命令简介

    图形界面和命令行要达到的目的是一样的,都是让用户控制计算机.然而,真正能够控制计算机硬件(CPU.内存.显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁 ...

  5. Python做性能测试-1、Locust基础篇

    前言:说起性能测试,大家想到的基本上都是工具jmeter和loadrunner多少也对执行性能测试的方式有一点认识,这些工具基本都实现了请求-响应-结果统计分析这样完整的测试链路,用户方面只需组织这些 ...

  6. POJ 1523 SPF (无向图割点)

    <题目链接> 题目大意: 给你一个连通的无向图,问你其中割点的编号,并且输出删除该割点后,原图会被分成几个连通分量. 解题分析: Tarjan求割点模板题. #include <cs ...

  7. Effective前端2---加快页面打开速度

    1.避免head标签JS阻塞 所有放在head标签里的JS和CSS都会阻塞页面渲染.如果这些CSS和JS需要记在时间比较久,中间页面会存在一个空白期,严重影响到用户体验. 例如以下代码:在head标签 ...

  8. Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口

    这几个接口经常与Lambda结合使用,网上当然也有很多介绍,不过有些过于繁琐,有些又偏简单,秉着实用主义精神,今天这里折中一下,把介绍的内容分为两部分,第一部分相当于TLDR,总结几个"口诀 ...

  9. C# ImageHelper

    using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; ...

  10. SSM整合Activiti

    1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...