按最后一列中的值过滤数组

Filter array by value in last column

我有这样的矩阵:

m1 = 
[1, 3, 4, 2, 1, 1]
[1, 3, 5, 3, 3, 1]
[1, 2, 3, 1, 1, 0]
[1, 3, 7, 3, 1, 1]

我需要对其进行过滤 tp 在最后一列中获取值 1。所以结果应该是这样的:

filter_array = 
[1, 3, 4, 2, 1, 1]
[1, 3, 5, 3, 3, 1]
[1, 3, 7, 3, 1, 1]

我当前的代码是:

m1 = np.array  ##see array above
filter_array = [ ]  ## the filtered array will be stored here. raw by raw 
for raw in m1: 
    if raw[-1] ==1:
        filter_array = filter_array.append(raw[:])

我的代码返回一个空数组。我一定是漏掉了什么...

只需这样做:

filtered = m1[m1[:, -1] == 1]

注意:您的原始代码不起作用,因为您将 append() 方法的 return 值分配给了 filter_array。由于添加到列表成功时的 return 值为 None,因此在将其重新分配给 None 后您将丢失原始列表。 要使您的代码正常工作,只需执行 filter_array.append(row[:]) 即可,因为这会在适当的位置改变列表。简单地附加 row 也可以。

filter_array.append(raw[:]) returns 没什么。它的 NoneType。 因此,您不能在 NoneType 对象第二次在循环中执行时将行附加到该对象。

你更正的循环应该是:

filter_array = []
for raw in m1: 
    if raw[-1] ==1:
        filter_array.append(raw[:])
print(filter_array)

或者更好的是,您可以使用列表理解和布尔索引,如下所示:

 filter_array = m1[[True if arr[-1] == 1 else False for arr in m1]]