numpy如何取出对角线元素、计算对角线元素和np.diagonal
作者:大Py
这篇文章主要介绍了numpy如何取出对角线元素、计算对角线元素和np.diagonal问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
numpy取出对角线元素、计算对角线元素和np.diagonal
np.diagonal(a, offset=0, axis1=0, axis2=1)
直接上例子:
1、二维数组
二维数组,重点理解offset参数。offset默认0,即从位置为(0,0)的元素斜45°角指向的元素。
当offset=1时,对角线向上移动1个位置,offset=2,移动两个位置,以此类推。
当offset取负值时,向下移动相应的位置数量。
见下:
arr =np.arange(9).reshape(3,3)
arr
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
------------------------------------
np.diagonal(arr)
array([0, 4, 8])
------------------------------------
np.diagonal(arr,offset=1)
array([1, 5])
------------------------------------
np.diagonal(arr,offset=2)
array([2])offset取值如下,不管数组是正方的还是长方形的,offset偏移方法是一样的。

2、三维数组
三维数组较复杂,重点是axis1和axis2的理解。
先看例子:
arr = np.array([[[ 9, 5, 2, 7],
[ 7, 2, 5, 9],
[ 5, 2, 9, 7]],
[[1, 0, 2, 4],
[4, 2, 1, 0],
[0, 4, 2, 2]]])
--------------------------------
np.diagonal(arr) # 默认axis1 = 0,axis2 = 1
array([[9, 4],
[5, 2],
[2, 1],
[7, 0]])上一个图:

默认是在axis = 0,axis = 1方向上取对角数据,即如下是我们在这个方向上看到的第一个3x2二维数组,后面还有三个3x2二维数组,对角线元素就是这4个二维数组的对角元素:

在举一个例子:
np.diagonal(arr,axis1=0, axis2=2)
array([[9, 0],
[7, 2],
[5, 4]])我们改在axis = 0,axis =2方向上取对角数据,即如下是我们在这个方向上看到的第一个2x4二维数组,后面还有2个2x4二维数组,对角线元素就是这3个二维数组的对角元素:

选取两个aixs可以认为是由这两轴确定的平面来截取数组,将数组分成相应的二维数组。
从垂直于这个平面也就是另外一个轴来观察数组,比如上面的例子,我们从事从轴1去看数组,取数。
生成对角矩阵 numpy.diag
给定对角线上元素,我想生成对角矩阵,在网上搜了一下,竟然都是numpy.diagonal。
这个函数的作用是提取给定矩阵的对角元素,当然不是我想要的。
后来发现numpy.diag才是生成对角矩阵的函数,所以记录下。
import numpy as np a=[1,2,3] np.diag(a) Out[4]: array([[1, 0, 0], [0, 2, 0], [0, 0, 3]])
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
