numpy如何取出对角线元素、计算对角线元素和np.diagonal

 更新时间:2023年06月14日 14:30:53   作者:大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]])

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论