Ответ 1
Если я правильно понял вопрос, я считаю, что это сработает
for i in range(num_rows):
for j in range(i, num_cols):
matrix[j][i] = matrix[i][j]
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, которую я имею. У меня есть информация в верхнем треугольнике. Есть ли простая функция для копирования верхнего треугольника в треугольник вниз матрицы?
Если я правильно понял вопрос, я считаю, что это сработает
for i in range(num_rows):
for j in range(i, num_cols):
matrix[j][i] = matrix[i][j]
Чтобы сделать это в 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
Вот лучше, я думаю:
>>> 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]])