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

2024-10-01 04:53:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组以列表的形式呈现,我需要删除所有的行,然后删除值大于某个变量的列。 我自己也不知道怎么做。 我能做的就是:

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

我只是想划船。但没用( 如何删除列-我甚至无法想象。在

数据示例 输入:

^{pr2}$

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

0.4 1.0  0.541 0.4  
0.1 0.41 1.0   0.23 

Tags: andinselffalse列表forifvalue
1条回答
网友
1楼 · 发布于 2024-10-01 04:53:22

如果您的数组如下所示:

>>> 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,因为它们不符合条件。在

^{pr2}$

如果列{2>中的一个列{或boo>现在应该忽略一个列^或^条件,那么我们应该忽略^列中的所有项:

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

相关问题 更多 >