Python 如何比较元素并删除不符合条件的元素

Python 如何比较元素并删除不符合条件的元素,python,numpy,Python,Numpy,我想比较numpy数组中一行的元素和下一行的元素。更准确地说 a=np.array([[1,2,3],[10,12,13],[20,23,24],[45,46,49],[51,52,53]]) 我知道我可以使用 np.diff(a,axis=0) 返回: array([[ 9, 10, 10], [10, 11, 11], [25, 23, 25], [ 6, 6, 4]]) 但是,如果没有具有差异的元素,如何获得初始“a”数组 形成布尔数组,当差值大于10时为真:

我想比较numpy数组中一行的元素和下一行的元素。更准确地说

a=np.array([[1,2,3],[10,12,13],[20,23,24],[45,46,49],[51,52,53]])
我知道我可以使用

np.diff(a,axis=0)
返回:

array([[ 9, 10, 10],
   [10, 11, 11],
   [25, 23, 25],
   [ 6,  6,  4]])
但是,如果没有具有差异的元素,如何获得初始“a”数组 形成布尔数组,当差值大于10时为真:

In [20]: d > 10
Out[20]: 
array([[False, False, False],
       [False,  True,  True],
       [ True,  True,  True],
       [False, False, False]], dtype=bool)
查找至少有一个元素为True的行:

In [21]: (d > 10).any(axis=1)
Out[21]: array([False,  True,  True, False], dtype=bool)
在a
True
前面加上前缀,以选择a
a
的第一行:

In [22]: np.r_[True, (d > 10).any(axis=1)]
Out[22]: array([ True, False,  True,  True, False], dtype=bool)
In [23]: a[np.r_[True, (d > 10).any(axis=1)]]
Out[23]: 
array([[ 1,  2,  3],
       [20, 23, 24],
       [45, 46, 49]])
选择
a的行

In [22]: np.r_[True, (d > 10).any(axis=1)]
Out[22]: array([ True, False,  True,  True, False], dtype=bool)
In [23]: a[np.r_[True, (d > 10).any(axis=1)]]
Out[23]: 
array([[ 1,  2,  3],
       [20, 23, 24],
       [45, 46, 49]])
形成布尔数组,当差值大于10时为真:

In [20]: d > 10
Out[20]: 
array([[False, False, False],
       [False,  True,  True],
       [ True,  True,  True],
       [False, False, False]], dtype=bool)
查找至少有一个元素为True的行:

In [21]: (d > 10).any(axis=1)
Out[21]: array([False,  True,  True, False], dtype=bool)
在a
True
前面加上前缀,以选择a
a
的第一行:

In [22]: np.r_[True, (d > 10).any(axis=1)]
Out[22]: array([ True, False,  True,  True, False], dtype=bool)
In [23]: a[np.r_[True, (d > 10).any(axis=1)]]
Out[23]: 
array([[ 1,  2,  3],
       [20, 23, 24],
       [45, 46, 49]])
选择
a的行

In [22]: np.r_[True, (d > 10).any(axis=1)]
Out[22]: array([ True, False,  True,  True, False], dtype=bool)
In [23]: a[np.r_[True, (d > 10).any(axis=1)]]
Out[23]: 
array([[ 1,  2,  3],
       [20, 23, 24],
       [45, 46, 49]])

考虑到你希望第三列中的差异考虑到你希望第三列中的差异与其他方法相比略有不同,也许这更符合你的思维过程

In [44]: d = np.diff(a[:,2])

In [45]: idx, = np.where(d <= 10)

In [46]: np.delete(a, idx, axis=0)
Out[46]: 
array([[10, 12, 13],
       [20, 23, 24],
       [51, 52, 53]])

In [47]: np.delete(a, idx+1, axis=0)
Out[47]: 
array([[ 1,  2,  3],
       [20, 23, 24],
       [45, 46, 49]])
[44]中的
:d=np.diff(a[:,2])

在[45]:idx,=np中,其中(d与其他方法相比略有不同,也许这更符合您的思维过程

In [44]: d = np.diff(a[:,2])

In [45]: idx, = np.where(d <= 10)

In [46]: np.delete(a, idx, axis=0)
Out[46]: 
array([[10, 12, 13],
       [20, 23, 24],
       [51, 52, 53]])

In [47]: np.delete(a, idx+1, axis=0)
Out[47]: 
array([[ 1,  2,  3],
       [20, 23, 24],
       [45, 46, 49]])
[44]中的
:d=np.diff(a[:,2])

在[45]:idx,=np.其中(d)第一行不符合您所述的条件。它与下一行的差异是
第一行不符合您所述的条件。它与下一行的差异是
非常感谢!很抱歉回答晚了。我应该说“与前一行的差异”.Mea culpa.我认为idxs返回的条件(False,True,True,False)适用于第一行(False);因此,第五行没有设置任何条件。因此,我认为我们应该在idxs前面加上True(或False)。ThksThanks非常感谢!很抱歉回答得太晚。我应该说“与前一行不同”.Mea culpa.我认为idxs返回的条件(False,True,True,False)适用于第一行(False);因此,第五行没有设置任何条件。因此,我认为我们应该在idxs前面加上True(或False)。ThksThanks太多了!很抱歉回答得太晚。如果我希望该条件仅适用于第三列,我将使用(d[:,2]>10)而不是(d>10)。any(axis=1)。非常感谢!很抱歉回答得太晚。如果我希望条件仅适用于第三列,我将使用(d[:,2]>10)而不是(d>10)。any(axis=1)谢谢谢谢谢谢所有这些帮助我了解如何使用numpy…非常快谢谢你我很感激所有这些帮助我了解如何使用numpy…非常快!