【问题标题】:How could I remove the rows of an array if one of the elements of the row does not satisfy a condition?如果行的元素之一不满足条件,我如何删除数组的行?
【发布时间】:2013-09-25 17:00:43
【问题描述】:

当数组第三列的元素小于特定数量时,我想删除数组的行。例如:

a=np.array([[2331.13,1944.88,23.1379,7,3.18339,0.482105],
[8168.44,1904.70,19.5025,265,4.12642,0.0376510],
[7389.36,1983.97,14.3581,3937,6.04109,0.713416],
[1765.18,1944.29,22.5495,35,2.30717,0.794432],
[2319.33,1946.68,22.4300,25,3.63676,0.0210690],
[785.666,2090.69,14.7940,1095,2.52823,0.999842],
[4071.24,2186.92,22.6616,31,2.79309,0.0312501],
[7082.51,2191.69,23.0122,19,2.53166,0.687001]])

我想删除满足以下条件的行:

a[:,2]<15.0

干杯。

【问题讨论】:

标签: python numpy


【解决方案1】:

我认为删除行或列最直接的方法是使用np.delete

>>> a = np.arange(16).reshape(4,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> a[:,2]
array([ 2,  6, 10, 14])
>>> to_remove = a[:,2] < 7
>>> to_remove
array([ True,  True, False, False], dtype=bool)
>>> new_a = np.delete(a, to_remove, axis=0)
>>> new_a
array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])

一行:

new_a = np.delete(a, a[:,2] < 7, axis=0)

【讨论】:

    【解决方案2】:

    你可以这样做:

    a[a[:,2]>=15.0, :]
    

    注意 a[:,2]&lt;15.0a[:,2]&gt;=15.0 的倒置,这样您就可以描述要保留而不是删除的行。

    如果反转你的条件不是那么简单,你也可以使用~

    a[~(a[:,2]<15.0), :]
    

    【讨论】:

    • 我倾向于使用波浪号:a[~(a[:,2] &lt; 15), :].
    • 请注意,这不会从数组中删除行,它只会显示其他行。为此,您必须执行以下操作:a = a[a[:,2]&gt;=15]a = np.delete(a, np.where(a[:,2]&lt;15, 0)。 (另外,后面不需要:
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多