I have an array out
. I want to print row numbers which have at least one non-zero element. However, I am getting an error. I present the expected output.
import numpy as np
out = np.array([[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 423.81345923, 0. , 407.01354328,
419.14952534, 0. , 212.13245959, 0. ,
0. , 0. , 0. , 0. ],
[402.93473651, 0. , 216.08166277, 407.01354328,
0. , 414.17017965, 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ]])
for i in range(0,len(out)):
if (out[i]==0):
print(i)
else:
print("None")
The error is
in <module>
if (out[i]==0):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
The expected output is
[1,2]
CodePudding user response:
The issue with your code is that out[i]
is an array. When you check if this array is equal to zero, it returns an array of booleans. The if
statement then returns an error. The following code should work:
solution = []
for idx, e in enumerate(out):
if any(e): # if any element of the array is nonzero
solution.append(idx)
print(solution)
The output is :
[1, 2]
I hope this helps!
CodePudding user response:
import numpy as np
out = np.array([[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 423.81345923, 0. , 407.01354328,
419.14952534, 0. , 212.13245959, 0. ,
0. , 0. , 0. , 0. ],
[402.93473651, 0. , 216.08166277, 407.01354328,
0. , 414.17017965, 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ]])
for i in range(0,len(out)):
if (out[i].sum()!=0):
print(i)
else:
print("None")
This sums up all values of each index and prints you all rows that contain any non-zero values.
CodePudding user response:
import numpy as np
out = ... # 2d array here
rows = np.where(out.any(axis=1))[0].tolist()
# rows:
# [1, 2]
CodePudding user response:
We have where
and unique
attributes in numpy which can help you to achieve this.
get_index = np.where(out != 0)[0]
rows = np.unique(get_index)
print(rows)