上一主题

numpy.compress

下一主题

numpy.select

numpy.diagonal

numpy.diagonal(a, offset=0, axis1=0, axis2=1)[source]

返回指定的对角线。

如果a是2-D,则返回具有给定偏移的a的对角线,即,形式a [ i + offset]如果a具有多于两个维度,则由axis1axis2指定的轴用于确定2-D子阵列,返回。可以通过删除axis1axis2并将右侧的索引添加到等于所生成的对角线的大小来确定生成的数组的形状。

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

在NumPy 1.7和1.8中,它继续返回对角线的副本,但是根据这个事实被弃用。写入结果数组继续工作,就像以前一样,但发出了FutureWarning。

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

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

如果你不写这个函数返回的数组,那么你可以忽略所有上面的。

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

参数:

a:array_like

数组,从中获取对角线。

offset:int,可选

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

axis1:int,可选

用作要从中获取对角线的2-D子阵列的第一轴的轴。默认为第一轴(0)。

axis2:int,可选

轴用作要从其获取对角线的2-D子阵列的第二轴。默认为第二轴(1)。

返回:

array_of_diagonals:ndarray

如果a是2-D而不是矩阵,则返回与包含对角线的a相同类型的1-D数字组。如果a是矩阵,则返回包含对角线的1-D数组,以保持向后兼容性。如果a的维度大于2,则返回对角线的数组,从最左边维度到最右边“打包”(例如,如果a 3-D,则对角线沿着行“包装”)。

上升:

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

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