Pour la prochaine fois, évite d'appeler tes variables l, ça ressemble beaucoup à un 1. Tu peux aussi formater ton code entre les balises [code] et [/code].
Ton problème vient du fait que tu assignes une matrice contenant des float à une matrice d'entiers.
Cette ligne
B=np.array([4,-1,-1,0,-1,4,-1,-1,-1,-1,4,-1,0,-1,-1,4])
crée une matrice d'
entiers
Mais cette expression
B[1]-l*B[0]
renvoie une matrice de flottants, parce que l = -1/4 = -0.25 ici
Quand tu exécutes l'expression ci-dessus, Python convertit (dans une variable temporaire) B[0] et B[1] (vecteurs d'entiers) en vecteurs de flottants et le résultat de l'opération est donc un vecteur de flottants [ 0. 3.75 -1.25 -1. ].
Mais quand tu mets ce résultat dans B[1], et comme Python est dynamiquement typé, le résultat du calcul est converti une nouvelle fois, cette fois en un vecteur d'entiers. Le 3.75 est converti en 3 et le -1.25 est converti en -1 (troncature) et donc tu obtiens le vecteur d'entiers [1 3 -1 1]
La solution : tu expliques à Python que B est à considérer comme une matrice de flottants
et tu dois donc lui donner le paramètre dtype explicitement
B = np.array([4,-1,-1,0,-1,4,-1,-1,-1,-1,4,-1,0,-1,-1,4], dtype="float").reshape(4,4)
et le résultat sera
[[ 4. -1. -1. 0. ]
[ 0. 3.75 -1.25 -1. ]
[-1. -1. 4. -1. ]
[ 0. -1. -1. 4. ]]
Alternativement, tu peux aussi faire comprendre à Python que B est un vecteur de flottants en passant à np.array un vecteur de flottants.
Pour cela, remplace par exemple le premier 4 par un 4.0 : [4.0,-1,-1,0,-1,4,-1,-1,-1,-1,4,-1,0,-1,-1,4].
numpy comprendra tout seul que, le type d'un vecteur devant être homogène, toutes les autres valeurs sont à convertir en float aussi