Подтвердить что ты не робот

Скопируйте верхний треугольник в нижний треугольник в матрице питона

       iluropoda_melanoleuca  bos_taurus  callithrix_jacchus  canis_familiaris
ailuropoda_melanoleuca     0        84.6                97.4                44
bos_taurus                 0           0                97.4              84.6
callithrix_jacchus         0           0                   0              97.4
canis_familiaris           0           0                   0                 0

Это короткая версия матрицы python, которую я имею. У меня есть информация в верхнем треугольнике. Есть ли простая функция для копирования верхнего треугольника в треугольник вниз матрицы?

4b9b3361

Ответ 1

Если я правильно понял вопрос, я считаю, что это сработает

for i in range(num_rows):
    for j in range(i, num_cols):
        matrix[j][i] = matrix[i][j]

Ответ 2

Чтобы сделать это в NumPy, без использования двойного цикла, вы можете использовать tril_indices.

>>> i_lower = np.tril_indices(n, -1)
>>> matrix[i_lower] = matrix.T[i_lower]  # make the matrix symmetric

Будьте осторожны, чтобы вы не пытались смешивать tril_indices и triu_indices поскольку оба они используют индексирование строки, т. triu_indices Это не работает:

>>> i_upper = np.triu_indices(n, 1)
>>> i_lower = np.tril_indices(n, -1)
>>> matrix[i_lower] = matrix[i_upper]  # make the matrix symmetric
>>> np.allclose(dist.T, dist)
False

Ответ 3

Вот лучше, я думаю:

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

>>> iu = np.triu_indices(4,1)
>>> il = (iu[1],iu[0])
>>> a[il]=a[iu]
>>> a
    array([[ 0,  1,  2,  3],
           [ 1,  5,  6,  7],
           [ 2,  6, 10, 11],
           [ 3,  7, 11, 15]])