Python。按条件从数组(显示为列表列表)中删除行和列

Python. Remove from array (presented as list of lists) rows and columns by condition

我有一个显示为列表列表的数组,我需要删除所有行,然后删除值大于某个变量的列。 我不知道自己该怎么做。 我所能做的就是:

rowNum =0
for row in self.Table:
    rowIsValid = False
    for value in row:
        if not value is None and (value > 0.35 and not value == 1):
            rowIsValid = True
    if not rowIsValid:
        self.Table =  numpy.delete(self.Table, (rowNum), axis=0)
        #self.Table.pop(row)
    rowNum+=1

而且我不只是为了行。它没有用( 如何删除列 - 我什至无法想象。

数据示例 输入:

 1.0 None 0.333 0.166 None
 0.4 1.0  0.541 0.4   0.3
 0.1 0.41 1.0   0.23  0.11

输出(例如,我需要删除所有值都小于 0.3 而不是(1 不包括在计算中)的行和列)

0.4 1.0  0.541 0.4  
0.1 0.41 1.0   0.23 

如果您的数组看起来像这样:

>>> arr = array([[ 1.   ,    nan,  0.333,  0.166,    nan],
       [ 0.4  ,  1.   ,  0.541,  0.4  ,  0.3  ],
       [ 0.1  ,  0.41 ,  1.   ,  0.23 ,  0.11 ]])

然后首先将所有 nan 值设置为 True,因为它们不符合条件。

>>> arr[np.isnan(arr)] = True

现在获取一个布尔值数组,其中 True 表示符合我们条件的项目,现在如果行或列中的所有项目都是 True 那么我们应该忽略该行或列:

>>> temp = (arr == 1.0) | (arr < 0.35)
>>> temp
array([[ True,  True,  True,  True,  True],
       [False,  True, False, False,  True],
       [ True, False,  True,  True,  True]], dtype=bool)

仅获取至少包含一个 False:

的行
>>> rows = ~np.all(temp, axis=1)
>>> rows
array([False,  True,  True], dtype=bool)

与行相同,但在不同的轴上:

>>> cols = ~np.all(temp, axis=0)
>>> cols
array([ True,  True,  True,  True, False], dtype=bool)

现在使用简单的索引和切片来获取所需的项目:

>>> arr[rows][:, cols]
array([[ 0.4  ,  1.   ,  0.541,  0.4  ],
       [ 0.1  ,  0.41 ,  1.   ,  0.23 ]])