numpy.diagonal#
- numpy.диагональ(a, смещение=0, axis1=0, axis2=1)[источник]#
Возвращает указанные диагонали.
Если a если 2-D, возвращает диагональ a с заданным смещением, т.е. набор элементов вида
a[i, i+offset]. Если a имеет более двух измерений, то оси, указанные axis1 и axis2 используются для определения 2-D подмассива, чья диагональ возвращается. Форма результирующего массива может быть определена удалением axis1 и axis2 и добавление индекса справа, равного размеру результирующих диагоналей.В версиях NumPy до 1.7 эта функция всегда возвращала новый независимый массив, содержащий копию значений на диагонали.
В NumPy 1.7 и 1.8 он продолжает возвращать копию диагонали, но полагаться на этот факт устарело. Запись в результирующий массив продолжает работать как раньше, но выдается предупреждение FutureWarning.
Начиная с NumPy 1.9 возвращает доступное только для чтения представление исходного массива. Попытка записи в результирующий массив вызовет ошибку.
В будущем выпуске он будет возвращать представление для чтения/записи, и запись в возвращенный массив изменит ваш исходный массив. Возвращенный массив будет иметь тот же тип, что и входной массив.
Если вы не записываете данные в массив, возвращаемый этой функцией, то можете просто проигнорировать всё вышесказанное.
Если вы зависите от текущего поведения, то мы предлагаем явно копировать возвращаемый массив, т.е. использовать
np.diagonal(a).copy()вместо простоnp.diagonal(a). Это будет работать как с прошлыми, так и с будущими версиями NumPy.- Параметры:
- aarray_like
Массив, из которого берутся диагонали.
- смещениеint, необязательный
Смещение диагонали от главной диагонали. Может быть положительным или отрицательным. По умолчанию главная диагональ (0).
- axis1int, необязательный
Ось, которая должна использоваться как первая ось 2-D подмассивов, из которых должны быть взяты диагонали. По умолчанию первая ось (0).
- axis2int, необязательный
Ось, используемая в качестве второй оси 2-D подмассивов, из которых должны быть взяты диагонали. По умолчанию вторая ось (1).
- Возвращает:
- array_of_diagonalsndarray
Если a является двумерным, то одномерный массив, содержащий диагональ и того же типа, что и a возвращается, если не указано иное a является
matrix, в этом случае одномерный массив, а не (двумерный)matrixвозвращается для сохранения обратной совместимости.Если
a.ndim > 2, то измерения, указанные axis1 и axis2 удаляются, и в конце вставляется новая ось, соответствующая диагонали.
- Вызывает:
- ValueError
Если размерность a меньше 2.
Смотрите также
Примеры
>>> import numpy as np >>> 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]])
Антидиагональ может быть получена обратным порядком элементов с использованием либо
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])
Обратите внимание, что порядок, в котором извлекается диагональ, варьируется в зависимости от функции переворота.