numpy.diagonal
-
numpy.diagonal(a, offset=0, axis1=0, axis2=1)
[source] -
Return specified diagonals.
If
a
is 2-D, returns the diagonal ofa
with the given offset, i.e., the collection of elements of the forma[i, i+offset]
. Ifa
has more than two dimensions, then the axes specified byaxis1
andaxis2
are used to determine the 2-D sub-array whose diagonal is returned. The shape of the resulting array can be determined by removingaxis1
andaxis2
and appending an index to the right equal to the size of the resulting diagonals.In versions of NumPy prior to 1.7, this function always returned a new, independent array containing a copy of the values in the diagonal.
In NumPy 1.7 and 1.8, it continues to return a copy of the diagonal, but depending on this fact is deprecated. Writing to the resulting array continues to work as it used to, but a FutureWarning is issued.
Starting in NumPy 1.9 it returns a read-only view on the original array. Attempting to write to the resulting array will produce an error.
In some future release, it will return a read/write view and writing to the returned array will alter your original array. The returned array will have the same type as the input array.
If you don’t write to the array returned by this function, then you can just ignore all of the above.
If you depend on the current behavior, then we suggest copying the returned array explicitly, i.e., use
np.diagonal(a).copy()
instead of justnp.diagonal(a)
. This will work with both past and future versions of NumPy.- Parameters
-
-
aarray_like
-
Array from which the diagonals are taken.
-
offsetint, optional
-
Offset of the diagonal from the main diagonal. Can be positive or negative. Defaults to main diagonal (0).
-
axis1int, optional
-
Axis to be used as the first axis of the 2-D sub-arrays from which the diagonals should be taken. Defaults to first axis (0).
-
axis2int, optional
-
Axis to be used as the second axis of the 2-D sub-arrays from which the diagonals should be taken. Defaults to second axis (1).
-
- Returns
-
-
array_of_diagonalsndarray
-
If
a
is 2-D, then a 1-D array containing the diagonal and of the same type asa
is returned unlessa
is amatrix
, in which case a 1-D array rather than a (2-D)matrix
is returned in order to maintain backward compatibility.If
a.ndim > 2
, then the dimensions specified byaxis1
andaxis2
are removed, and a new axis inserted at the end corresponding to the diagonal.
-
- Raises
-
- ValueError
-
If the dimension of
a
is less than 2.
See also
Examples
>>> a = np.arange(4).reshape(2,2) >>> a array([[0, 1], [2, 3]]) >>> a.diagonal() array([0, 3]) >>> a.diagonal(1) array([1])
A 3-D example:
>>> 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]])
The sub-arrays whose main diagonals we just obtained; note that each corresponds to fixing the right-most (column) axis, and that the diagonals are “packed” in rows.
>>> a[:,:,0] # main diagonal is [0 6] array([[0, 2], [4, 6]]) >>> a[:,:,1] # main diagonal is [1 7] array([[1, 3], [5, 7]])
The anti-diagonal can be obtained by reversing the order of elements using either
numpy.flipud
ornumpy.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])
Note that the order in which the diagonal is retrieved varies depending on the flip function.
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.diagonal.html