numpy.triu_indices

numpy.triu_indices(n, k=0, m=None)

Функция triu_indices() возвращает индексы элементов верхнего треугольника массива указанного размера.

Параметры:
n - целое положительное число.
Ширина массива.
k - целое положительное число (необязательный параметр).
Смещение диагонали треугольника (см. tril()).
m - целое положительное число (необязательный параметр).
Высота массива. По умолчанию m = n.
Возвращает:
tuple - кортеж массивов NumPy
кортеж массивов с индексами элементов верхнего треугольника массива указанного размера.
Смотрите так же:
triu_indices_from, tril_indices, tril_indices_from, tril, triu


Примеры

Извлечем индексы элементов верхнего треугольника квадратного массива с размером (4, 4):

>>> import numpy as np
>>> 
>>> 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]])
>>> 
>>> triu_ind = np.triu_indices(4)
>>> triu_ind
(array([0, 0, 0, 0, 1, 1, 1, 2, 2, 3], dtype=int32), array([0, 1, 2, 3, 1, 2, 3, 2, 3, 3], dtype=int32))
>>> 
>>> a[triu_ind]
array([ 0,  1,  2,  3,  5,  6,  7, 10, 11, 15])

Пользуясь данным индексом мы можем присвоить элементам треугольника любое значение:

>>> a[triu_ind] = 777
>>> a
array([[777, 777, 777, 777],
       [  4, 777, 777, 777],
       [  8,   9, 777, 777],
       [ 12,  13,  14, 777]])

С помощью параметра k диагональ треугольника можно смещать:

>>> 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]])
>>> 
>>> triu_ind_km1 = np.triu_indices(4, k = -1)
>>> 
>>> a[triu_ind_km1] = 777
>>> a
array([[777, 777, 777, 777],
       [777, 777, 777, 777],
       [  8, 777, 777, 777],
       [ 12,  13, 777, 777]])
>>> 
>>> triu_ind_k1 = np.triu_indices(4, k = 1)
>>> 
>>> a[triu_ind_k1] = 111
>>> a
array([[777, 111, 111, 111],
       [777, 777, 111, 111],
       [  8, 777, 777, 111],
       [ 12,  13, 777, 777]])

Массивы могут любой длины и высоты:

np.set_printoptions(linewidth = 200, edgeitems = 15)
>>> 
>>> a = np.arange(150).reshape(10, 15)
>>> a
array([[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14],
       [ 15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29],
       [ 30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44],
       [ 45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59],
       [ 60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74],
       [ 75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89],
       [ 90,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104],
       [105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119],
       [120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134],
       [135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149]])
>>> 
>>> triu_ind_rectan = np.triu_indices(n = 10, m = 15)
>>> 
>>> 
>>> a[triu_ind_rectan] = -7
>>> a
array([[ -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [ 15,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [ 30,  31,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [ 45,  46,  47,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [ 60,  61,  62,  63,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [ 75,  76,  77,  78,  79,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [ 90,  91,  92,  93,  94,  95,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [105, 106, 107, 108, 109, 110, 111,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [120, 121, 122, 123, 124, 125, 126, 127,  -7,  -7,  -7,  -7,  -7,  -7,  -7],
       [135, 136, 137, 138, 139, 140, 141, 142, 143,  -7,  -7,  -7,  -7,  -7,  -7]])