如果所有元素都等于某个值,请从numpy数组中删除行/列

时间:2019-04-13 23:04:08

标签: arrays python-3.x numpy delete-row

我试图找到一种简洁的方法来遍历numpy数组的所有行和所有列,并在一行或一列的所有值都等于例如inf的情况下删除行或列。 / p>

假设我有以下数组:

import numpy as np

m = np.array([[1,2,3,4],
             [np.inf,np.inf,np.inf,np.inf],
             [9,10,11,12]])

然后,如果我使用

row = 0
while row < m.shape[0]:
    if np.all(np.isinf(m[row,:])):
        m = np.delete(m,row,axis=0)
        row -= 1
    row += 1

print(m)

我得到的输出,

[[1,2,3,4],     
[9,10,11,12]]

我可以使用类似的方法删除所有infs的列。但是,此方法很麻烦,因此我尝试使用以下方法:

m = m[np.all(~np.isinf(m),axis=1)]

这在查找和删除所有infs的行时效果很好,但是当我尝试以下查找并删除包含所有infs的所有列时,该方法会遇到问题,

m = np.array([[1,2,np.inf,4],
                        [5,6,np.inf,8],
                        [9,10,np.inf,12]])

m = m[np.all(~np.isinf(m),axis=0)]

出现以下错误

IndexError: boolean index did not match indexed array along dimension 0; dimension is 3 but corresponding boolean dimension is 4

我曾经认为使用axis=1会沿着每一行进行搜索,而axis=0会沿着每一列进行搜索,但是似乎我可能不了解axis的使用原理。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

只需用这一行替换引发错误的行:

m = m[:, np.all(~np.isinf(m),axis=0)]
相关问题