numpy.diagonal

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

返回指定的对角线。

如果 a 是二维的,返回 a 具有给定的偏移量,即窗体元素的集合 a[i, i+offset] . 如果 a 有两个以上的维度,则轴由 axis1axis2 用于确定返回对角线的二维子数组。结果数组的形状可以通过删除 axis1axis2 在右边附加一个索引,等于所得到的对角线的大小。

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

在numpy 1.7和1.8中,它继续返回对角线的副本,但根据这个事实,它被否决了。写入生成的数组将继续像以前那样工作,但会发出一个未来警告。

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

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

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

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

参数
aarray_like

从中提取对角线的数组。

offset可选的

对角线与主对角线的偏移量。可以是正的也可以是负的。默认为主对角线(0)。

axis1可选的

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

axis2可选的

坐标轴用作二维子阵列的第二个坐标轴,从中应取对角线。默认为第二个轴(1)。

返回
array_of_diagonals恩达雷

如果 a 是二维的,然后是包含对角线的一维数组,其类型与 a 返回,除非 a 是一个 matrix ,在这种情况下,是一维数组而不是(二维) matrix 返回以保持向后兼容性。

如果 a.ndim > 2 ,然后是指定的尺寸 axis1axis2 并在与对角线相对应的末端插入新轴。

加薪
ValueError

如果 a 小于2。

参见

diag

Matlab的工作类似于1-D和2-D数组。

diagflat

创建对角数组。

trace

沿对角线求和。

实例

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

一个三维例子:

>>> 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])

请注意,检索对角线的顺序因翻转函数而异。