numpy.diagonal#
- numpy.diagonal(a, offset=0, axis1=0, axis2=1)[源代码]#
返回指定的对角线.
如果 a 是二维数组,则返回 a 的对角线,该对角线具有给定的偏移量,即
a[i, i+offset]形式的元素的集合.如果 a 具有两个以上的维度,则由 axis1 和 axis2 指定的轴用于确定二维子数组,然后返回该子数组的对角线.可以通过删除 axis1 和 axis2 并在右侧添加一个等于结果对角线大小的索引来确定结果数组的形状.在NumPy 1.7之前的版本中,此函数始终返回一个包含对角线值副本的新的,独立的数组.
在NumPy 1.7和1.8中,它继续返回对角线的副本,但是依赖于此事实已被弃用.写入结果数组仍然可以像以前一样工作,但是会发出FutureWarning.
从NumPy 1.9开始,它返回原始数组上的只读视图.尝试写入结果数组将产生错误.
在将来的某个版本中,它将返回一个读/写视图,并且写入返回的数组将更改您的原始数组.返回的数组将具有与输入数组相同的类型.
如果您不写入此函数返回的数组,则可以忽略以上所有内容.
如果您依赖于当前的行为,那么我们建议您显式复制返回的数组,即使用
np.diagonal(a).copy()代替np.diagonal(a).这适用于NumPy的过去和未来版本.- 参数:
- aarray_like
从中获取对角线的数组.
- offsetint, optional
对角线相对于主对角线的偏移量.可以是正数或负数.默认为主对角线(0).
- axis1int, optional
用作二维子数组的第一个轴的轴,应该从该子数组中获取对角线.默认为第一个轴(0).
- axis2int, optional
用作二维子数组的第二个轴的轴,应该从该子数组中获取对角线.默认为第二个轴(1).
- 返回:
- Raises:
- ValueError
如果 a 的维度小于2,则会引发异常.
示例
>>> 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-D的例子:
>>> 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.flipud或numpy.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])
请注意,检索对角线的顺序因翻转函数而异.