numpy.linalg.diagonal#
- linalg.diagonal(x, /, *, offset=0)[源代码]#
返回矩阵(或矩阵堆栈)``x`` 的指定对角线.
这个函数与 Array API 兼容,与
numpy.diagonal
不同,矩阵被假定为由最后两个维度定义.- 参数:
- x(…,M,N) array_like
具有形状 (…, M, N) 的输入数组,其最内层的两个维度形成 MxN 矩阵.
- offsetint, 可选
偏移量指定相对于主对角线的非对角线位置,其中:
* offset = 0: the main diagonal. * offset > 0: off-diagonal above the main diagonal. * offset < 0: off-diagonal below the main diagonal.
- 返回:
- out(…,min(N,M)) ndarray
一个包含对角线的数组,其形状通过移除最后两个维度并附加一个等于结果对角线大小的维度来确定.返回的数组必须与
x
具有相同的数据类型.
示例
>>> a = np.arange(4).reshape(2, 2); a array([[0, 1], [2, 3]]) >>> np.linalg.diagonal(a) array([0, 3])
一个三维示例:
>>> a = np.arange(8).reshape(2, 2, 2); a array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> np.linalg.diagonal(a) array([[0, 3], [4, 7]])
通过使用 offset 参数,可以获得与主对角线相邻的对角线:
>>> a = np.arange(9).reshape(3, 3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> np.linalg.diagonal(a, offset=1) # First superdiagonal array([1, 5]) >>> np.linalg.diagonal(a, offset=2) # Second superdiagonal array([2]) >>> np.linalg.diagonal(a, offset=-1) # First subdiagonal array([3, 7]) >>> np.linalg.diagonal(a, offset=-2) # Second subdiagonal array([6])
反对角线可以通过使用
numpy.flipud
或numpy.fliplr
反转元素的顺序来获得.>>> a = np.arange(9).reshape(3, 3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> np.linalg.diagonal(np.fliplr(a)) # Horizontal flip array([2, 4, 6]) >>> np.linalg.diagonal(np.flipud(a)) # Vertical flip array([6, 4, 2])
请注意,对角线的检索顺序会根据翻转函数而变化.