numpy.triu_indices#

numpy.triu_indices(n, k=0, m=None)[источник]#

Возвращает индексы для верхнего треугольника массива (n, m).

Параметры:
nint

Размер массивов, для которых возвращенные индексы будут действительны.

kint, необязательный

Смещение диагонали (см. triu подробности).

mint, необязательный

Колонное измерение массивов, для которых возвращаемые массивы будут действительны. По умолчанию m принимается равным n.

Возвращает:
, лицензировано подкортеж, shape(2) из ndarrays, shape(n)

Индексы строк и столбцов соответственно. Индексы строк отсортированы в неубывающем порядке, а соответствующие индексы столбцов строго возрастают для каждой строки.

Смотрите также

tril_indices

аналогичная функция для нижнетреугольной матрицы.

mask_indices

универсальная функция, принимающая произвольную функцию маски.

triu, tril

Примеры

>>> import numpy as np

Вычислите два разных набора индексов для доступа к массивам 4x4: один для верхней треугольной части, начиная с главной диагонали, и другой, начиная с двух диагоналей правее:

>>> iu1 = np.triu_indices(4)
>>> iu1
(array([0, 0, 0, 0, 1, 1, 1, 2, 2, 3]), array([0, 1, 2, 3, 1, 2, 3, 2, 3, 3]))

Обратите внимание, что индексы строк (первый массив) не убывают, а соответствующие индексы столбцов (второй массив) строго возрастают для каждой строки.

Вот как их можно использовать с примером массива:

>>> a = np.arange(16).reshape(4, 4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

Как для индексации:

>>> a[iu1]
array([ 0,  1,  2, ..., 10, 11, 15])

И для присваивания значений:

>>> a[iu1] = -1
>>> a
array([[-1, -1, -1, -1],
       [ 4, -1, -1, -1],
       [ 8,  9, -1, -1],
       [12, 13, 14, -1]])

Они покрывают только небольшую часть всего массива (две диагонали справа от главной):

>>> iu2 = np.triu_indices(4, 2)
>>> a[iu2] = -10
>>> a
array([[ -1,  -1, -10, -10],
       [  4,  -1,  -1, -10],
       [  8,   9,  -1,  -1],
       [ 12,  13,  14,  -1]])