numpy.diagonal
-
numpy.diagonal(a, offset=0, axis1=0, axis2=1)[source] -
Возвращение указанных диагоналей.
Если
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.- Parameters
-
-
aarray_like -
Массив, из которого берутся диагонали.
-
offsetint, optional -
Смещение диагонали от главной диагонали. Может быть положительным или отрицательным. По умолчанию — главная диагональ (0).
-
axis1int, optional -
Ось, которая будет использоваться в качестве первой оси двумерных подмассивов, из которых должны быть взяты диагонали. По умолчанию — первая ось (0).
-
axis2int, optional -
Ось, которая будет использоваться в качестве второй оси двумерных подмассивов, из которых должны быть взяты диагонали. По умолчанию — вторая ось (1).
-
- Returns
-
-
array_of_diagonalsndarray -
Если
aдвумерный, то возвращается одномерный массив, содержащий диагональ и имеющий тот же тип, что иa, за исключением случая, когдаaявляетсяmatrix, в этом случае возвращается одномерный массив, а не (двумерный)matrix, чтобы сохранить обратную совместимость.Если
a.ndim > 2, то измерения, указанныеaxis1иaxis2, удаляются, и вставляется новая ось в конце, соответствующая диагонали.
-
- Raises
-
- ValueError
-
Если размерность
aменьше 2.
См. также
Примеры
>>> a = np.arange(4).reshape(2,2) >>> a array([[0, 1], [2, 3]]) >>> a.diagonal() array([0, 3]) >>> a.diagonal(1) array([1])Пример с 3-мерным массивом:
>>> 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])Обратите внимание, что порядок получения диагонали зависит от используемой функции изменения порядка.
© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.diagonal.html