NumPy参考 >例行程序 >Indexing routines > numpy.diagonal
numpy.
diagonal
(a,offset = 0,axis1 = 0,axis2 = 1 )[源代码] ¶返回指定的对角线。
如果a为2-D,则返回给定偏移量a的对角线,即形式为的元素的集合。如果
a具有两个以上的维,则使用axis1
和axis2指定的轴来确定返回对角线的2-D子数组。可以通过删除axis1和axis2并在右边添加一个等于所得对角线大小的索引来确定所得数组的形状。a[i, i+offset]
在1.7之前的NumPy版本中,此函数始终返回一个新的独立数组,其中包含对角线中的值的副本。
在NumPy 1.7和1.8中,它继续返回对角线的副本,但是不赞成这样做。写入结果数组将继续像以前一样工作,但是会发出FutureWarning。
从NumPy 1.9开始,它返回原始数组的只读视图。尝试写入结果数组将产生错误。
在将来的发行版中,它将返回一个读/写视图,并且写入返回的数组将更改您的原始数组。返回的数组将具有与输入数组相同的类型。
如果不写此函数返回的数组,则可以忽略以上所有内容。
如果您依赖当前行为,则建议显式复制返回的数组,即使用use np.diagonal(a).copy()
代替just np.diagonal(a)
。这适用于过去和将来的NumPy版本。
从中获取对角线的数组。
对角线与主对角线的偏移量。可以是正数或负数。默认为主对角线(0)。
用作2-D子阵列的第一条轴的轴,应从该轴取对角线。默认为第一轴(0)。
用作2-D子数组的第二条轴的轴,应从该轴取对角线。默认为第二轴(1)。
如果的尺寸一小于2。
例子
>>> a = np.arange(4).reshape(2,2)
>>> a
array([[0, 1],
[2, 3]])
>>> a.diagonal()
array([0, 3])
>>> a.diagonal(1)
array([1])
3D范例:
>>> 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])
请注意,取回对角线的顺序因翻转功能而异。