按最后一列中的值过滤数组
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]]
我有这样的矩阵:
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]]