I'm trying to write a function to delete all rows in which have a zero value in. This is not from my code, but an example of the idea I am using:
import numpy as np
a=np.array(([7,1,2,8],[4,0,3,2],[5,8,3,6],[4,3,2,0]))
b=[]
for i in range(len(a)):
for j in range (len(a[i])):
if a[i][j]==0:
b.append(i)
print 'b=', b
for zero_row in b:
x=np.delete(a,zero_row, 0)
print 'a=',a
and this is my output:
b= [1, 3]
a= [[7 1 2 8]
[4 0 3 2]
[5 8 3 6]
[4 3 2 0]]
How do I get rid of the rows with the index in b? Sorry, I'm fairly new to this any help would be really appreciated.
I'm trying to write a function to delete all rows in which have a zero value in.
You don't need to write a function for that, it can be done in a single expression:
>>> a[np.all(a != 0, axis=1)]
array([[7, 1, 2, 8],
[5, 8, 3, 6]])
Read as: select from a
all rows that are entirely non-zero.
Looks like np.delete
does't change the array, just returns a new array, so
Instead of
x = np.delete(a,zero_row, 0)
try
a = np.delete(a,zero_row, 0)
I think I have found the answer:
as @tuxcanfly said I changed x to a. Also I have now removed the for loop as it removed the row with index 2 for some reason.
Instead I now just chose to delete the rows using b as the delete function with use the elements in the list to remove the row with that index.
the new code:
import numpy as np
a=np.array(([7,1,2,8],[4,0,3,2],[5,8,3,6],[4,3,2,0]))
b=[]
for i in range(len(a)):
for j in range (len(a[i])):
if a[i][j]==0:
b.append(i)
print 'b=',b
for zero_row in b:
a=np.delete(a,b, 0)
print 'a=',a
and the output:
b= [1, 3]
a= [[7 1 2 8]
[5 8 3 6]]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With