0

I have matrix like this:

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]

I need to filter it tp get value 1 in the last column. So result should be like this:

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

My current code is:

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[:])

My code gives me back an empty array. I've must missed something...

Barmar
  • 741,623
  • 53
  • 500
  • 612
Ali
  • 13
  • 1
  • 4

2 Answers2

2

Simply do this:

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

Note: Your original code did not work because you were assigning the return value of append() method to the filter_array. Since the return value when append to a list is successful is None, you lose your original list after reassigning it to None. To get your code working, simply do filter_array.append(row[:]) as this mutates the list in place. Simply appending row also works.

swag2198
  • 2,546
  • 1
  • 7
  • 18
1

filter_array.append(raw[:]) returns nothing. Its NoneType. So you cannot append row to a NoneType object the second time it executes in the loop.

Your corrected loop should be:

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

Or better you could use list comprehension and boolean indexing like below:

 filter_array = m1[[True if arr[-1] == 1 else False for arr in m1]]
SomeDude
  • 13,876
  • 5
  • 21
  • 44