【问题标题】:How to remove nan and inf values from a numpy matrix?如何从 numpy 矩阵中删除 nan 和 inf 值?
【发布时间】:2018-09-22 16:03:21
【问题描述】:

这是我的代码

import numpy as np
cv = [[1,3,4,56,0,345],[2,3,2,56,87,255],[234,45,35,76,12,87]]
cv2 = [[1,6,4,56,0,345],[2,3,4,56,187,255],[234,45,35,0,12,87]]

output = np.true_divide(cv,cv2,where=(cv!=0) | (cv2!=0))
print(output)`

我正在获取 Nan 和 inf 值。我尝试以不同的方式删除,一旦我删除了 Nan,然后我删除了 Inf 值并将它们替换为 0。但我需要将它们一起替换!有没有办法一起替换它们?

【问题讨论】:

  • "但是我需要一起替换它们!我"为什么?

标签: python numpy matrix


【解决方案1】:

您可以将NaN 和无限值替换为以下掩码:

output[~np.isfinite(output)] = 0

>>> output
array([[1.        , 0.5       , 1.        , 1.        , 0.        ,
        1.        ],
       [1.        , 1.        , 0.5       , 1.        , 0.46524064,
        1.        ],
       [1.        , 1.        , 1.        , 0.        , 1.        ,
        1.        ]])

【讨论】:

【解决方案2】:

如果不想原地修改数组,可以利用np.ma库,创建一个掩码数组:

np.ma.masked_array(output, ~np.isfinite(output)).filled(0)

array([[1.        , 0.5       , 1.        , 1.        , 0.        ,
        1.        ],
       [1.        , 1.        , 0.5       , 1.        , 0.46524064,
        1.        ],
       [1.        , 1.        , 1.        , 0.        , 1.        ,
        1.        ]])

【讨论】:

    【解决方案3】:

    为此有一个特殊功能:

    numpy.nan_to_num(x_arr, copy=False, nan=0.0, posinf=0.0, neginf=0.0)
    

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2016-08-15
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多