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.- Параметры
-
- aarray_like
-
Массив, из которого берутся диагонали.
- offsetint, необязательно
-
Смещение диагонали от главной диагонали. Может быть положительным или отрицательным. По умолчанию — главная диагональ (0).
- axis1int, необязательно
-
Ось, используемая в качестве первой оси двумерных подмассивов, из которых нужно взять диагонали. По умолчанию — первая ось (0).
- axis2int, необязательно
-
Ось, используемая в качестве второй оси двумерных подмассивов, из которых нужно взять диагонали. По умолчанию — вторая ось (1).
- Возвращает
-
- array_of_diagonalsndarray
-
Если
aявляется двумерным, то возвращается одномерный массив, содержащий диагональ и имеющий тот же тип, что иa, за исключением случаев, когдаaявляетсяmatrix, в этом случае возвращается одномерный массив, а не двумерныйmatrix, чтобы поддерживать обратную совместимость.Если
a.ndim > 2, то измерения, указанныеaxis1иaxis2, удаляются, а новая ось вставляется в конец, соответствующая диагонали.
- Возбуждает
-
- 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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.diagonal.html