将numpy数组的特定索引中的数字替换为NaN

时间:2019-05-22 08:33:16

标签: python numpy

我有一个如下所示的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

但出现错误

非常感谢

1 个答案:

答案 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]])