numpy.diagonal#

numpy.diagonal(a, offset=0, axis1=0, axis2=1)[源代码]#

返回指定的对角线.

如果 a 是 2 维数组,则返回 a 的对角线,带有给定的偏移量,即形式为 a[i, i+offset] 的元素的集合.如果 a 的维数大于 2,则由 axis1axis2 指定的轴用于确定 2 维子数组,该子数组的对角线将被返回.可以通过移除 axis1axis2 并在右侧附加一个等于结果对角线大小的索引来确定结果数组的形状.

在 NumPy 1.7 之前的版本中,此函数始终返回一个包含对角线中值的副本的新的,独立的数组.

在 NumPy 1.7 和 1.8 中,它继续返回对角线的副本,但是依赖于此事实已被弃用.写入结果数组继续像以前一样工作,但会发出 FutureWarning.

从 NumPy 1.9 开始,它返回原始数组上的只读视图.尝试写入结果数组将产生错误.

在将来的某个版本中,它将返回一个读/写视图,并且写入返回的数组将改变您的原始数组.返回的数组将与输入数组具有相同的类型.

如果您不写入此函数返回的数组,则可以忽略以上所有内容.

如果您依赖于当前行为,那么我们建议显式复制返回的数组,即使用 np.diagonal(a).copy() 而不仅仅是 np.diagonal(a) .这将适用于 NumPy 的过去和未来的版本.

参数:
aarray_like

从中提取对角线的数组.

offset整数,可选

对角线相对于主对角线的偏移量.可以是正数或负数. 默认为主对角线 (0).

axis1整数,可选

用作 2 维子数组的第一个轴的轴,从中应提取对角线. 默认为第一个轴 (0).

axis2整数,可选

用作 2 维子数组的第二个轴的轴,从中应提取对角线.默认为第二个轴 (1).

返回:
array_of_diagonalsndarray

如果 a 是 2 维数组,则返回一个包含对角线的 1 维数组,并且与 a 的类型相同,除非 a 是一个 matrix ,在这种情况下,为了保持向后兼容性,返回一个 1 维数组而不是 (2-D) matrix .

如果 a.ndim > 2 ,则移除由 axis1axis2 指定的维度,并在末尾插入一个与对角线对应的新轴.

提出:
ValueError

如果 a 的维度小于 2.

参见

diag

用于 1 维和 2 维数组的类似 MATLAB 的操作.

diagflat

创建对角数组.

trace

沿对角线求和.

示例

>>> import numpy as np
>>> a = np.arange(4).reshape(2,2)
>>> a
array([[0, 1],
       [2, 3]])
>>> a.diagonal()
array([0, 3])
>>> a.diagonal(1)
array([1])

一个 3 维示例:

>>> a = np.arange(8).reshape(2,2,2); a
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> a.diagonal(0,  # Main diagonals of two arrays created by skipping
...            0,  # across the outer(left)-most axis last and
...            1)  # the "middle" (row) axis first.
array([[0, 6],
       [1, 7]])

我们刚刚获得其主对角线的子数组; 请注意,每个子数组都对应于固定最右侧(列)轴,并且对角线“打包”在行中.

>>> a[:,:,0]  # main diagonal is [0 6]
array([[0, 2],
       [4, 6]])
>>> a[:,:,1]  # main diagonal is [1 7]
array([[1, 3],
       [5, 7]])

可以通过使用 numpy.flipudnumpy.fliplr 反转元素的顺序来获得反对角线.

>>> a = np.arange(9).reshape(3, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.fliplr(a).diagonal()  # Horizontal flip
array([2, 4, 6])
>>> np.flipud(a).diagonal()  # Vertical flip
array([6, 4, 2])

请注意,检索对角线的顺序取决于翻转函数.