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