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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列相关的知识,希望对你有一定的参考价值。

我试图找到一种简洁的方法来遍历numpy数组的所有行和所有列,并删除行或列,如果它的所有值都相等,例如qazxsw poi。

假设我有以下数组:

inf

如果我使用,

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

以上是关于如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列的主要内容,如果未能解决你的问题,请参考以下文章

如果所有记录都等于特定值,则从一个表中删除记录

如何从 NumPy 数组中删除所有零元素?

PHP数组中,如何查询所有等于指定值得元素下标?

如果值等于,则从对象返回键和值

numpy多维数组元素筛选

numpy多维数组元素筛选