Если я изменю ваш код для создания массивов с плавающей точкой dtype, особенно I
:
In [88]: A=np.array([[1,-8],[2,-1],[2,14]], float) ###
...:
...: k=2
...: x = np.array([[0],[15]])
...:
...: v=np.array([[0.70710678],[0.70710678]])
...:
...: temp = x - 2*v @ v.T @ x
...:
...: print("temp = ",temp)
...: I=np.array([[0,0],[0,0],[0,0]], float) ####
...: print("I = ",I)
...:
...: I[k-1:3,k-1:2]= temp
...: print("new I =",I)
temp = [[-1.49999999e+01]
[ 5.03409456e-08]]
I = [[0. 0.]
[0. 0.]
[0. 0.]]
new I = [[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 -1.49999999e+01]
[ 0.00000000e+00 5.03409456e-08]]
round
дает мне больше контроля, чем усечение:
In [90]: np.round(I)
Out[90]:
array([[ 0., 0.],
[ 0., -15.],
[ 0., 0.]])
In [91]: I.astype(int)
Out[91]:
array([[ 0, 0],
[ 0, -14],
[ 0, 0]])