我有一个如下所示的numpy数组:
[[1399 17 4 3 0 0 0 0]
[ 11 374 2 3 1 4 0 1]
[ 7 0 187 4 0 0 1 1]
[ 2 3 4 308 0 0 0 3]
[ 2 0 0 0 280 3 0 1]
[ 0 2 0 0 2 81 0 3]
[ 1 0 2 0 2 0 154 4]
[ 0 0 1 2 1 1 8 552]]
我想将[x,x](即列号和行号)相同的值替换为np.nan
。我尝试这样做:
for i in range(8):
data[i][i] = np.nan
但出现错误
非常感谢
答案 0 :(得分:5)
在将数组键入numpy.fill_diagonal
后使用float
:
import numpy as np
arr = np.random.randint(0, 10, (10,10))
arr = arr.astype(float)
np.fill_diagonal(arr, np.nan)
输出:
array([[nan, 2., 6., 6., 1., 2., 7., 2., 7., 0.],
[ 3., nan, 3., 7., 3., 5., 2., 9., 1., 3.],
[ 4., 2., nan, 2., 6., 0., 4., 3., 5., 8.],
[ 8., 8., 6., nan, 7., 8., 4., 1., 0., 8.],
[ 5., 2., 1., 5., nan, 6., 4., 7., 8., 7.],
[ 9., 5., 7., 1., 6., nan, 7., 9., 2., 8.],
[ 5., 1., 5., 6., 1., 0., nan, 5., 1., 6.],
[ 5., 9., 7., 4., 4., 4., 0., nan, 3., 5.],
[ 8., 2., 2., 0., 4., 5., 2., 2., nan, 3.],
[ 7., 4., 9., 4., 5., 4., 2., 4., 0., nan]])