Я думаю, что вы должны проверить data.corr()
, потому что ваш код правильный и выдает диагноз (см. Ниже).Один вопрос: вы используете np.triu
, но изображение, которое вы показываете, показывает np.tirl
.
Вот код, который я тестировал - диагональ есть:
N = 5
A = np.arange(N*N).reshape(N,N)
B = np.tril(A)
mask =np.zeros_like(A)
mask[np.triu_indices_from(mask)] = True
print('A'); print(A); print()
print('tril(A)'); print(B); print()
print('mask'); print(mask); print()
дает
A
[[ 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]]
tril(A)
[[ 0 0 0 0 0]
[ 5 6 0 0 0]
[10 11 12 0 0]
[15 16 17 18 0]
[20 21 22 23 24]]
mask
[[1 1 1 1 1]
[0 1 1 1 1]
[0 0 1 1 1]
[0 0 0 1 1]
[0 0 0 0 1]]
edit: suplement
Вы можете перенастроить маску, например,
C = A *mask
D = np.where(C > 1, 1,C)
print('D'); print(D)
дает
D
[[0 1 1 1 1]
[0 1 1 1 1]
[0 0 1 1 1]
[0 0 0 1 1]
[0 0 0 0 1]]
Первый элемент диагонали D теперь равен нулю, так как первый элемент диагонали A тоже равен нулю.
edit: suplement 2
F = np.tril(A,-1)
E = np.eye(N)
G = E + F
print('F'); print(F); print()
print('E'); print(E); print()
print('G'); print(G); print()
т
F
[[ 0 0 0 0 0]
[ 5 0 0 0 0]
[10 11 0 0 0]
[15 16 17 0 0]
[20 21 22 23 0]]
E
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
G
[[ 1. 0. 0. 0. 0.]
[ 5. 1. 0. 0. 0.]
[10. 11. 1. 0. 0.]
[15. 16. 17. 1. 0.]
[20. 21. 22. 23. 1.]]