Во-первых, вы должны взглянуть на страницу документации для numpy.nonzero
.
По сути, то, что возвращает nonzero
, это кортеж массивов, сразу пригодных для индексации:
ar1[(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1]), np.array([0, 1, 2, 5, 0, 1, 2, 4, 5]))]
# array([4, 7, 3, 1, 4, 1, 1, 1, 6])
Это означает, что количество возвращаемых массивов равно количеству измерений вашего массива (например, ar1
- это двумерный массив), и каждая группа чисел в той же позиции является индексом воригинальный массив.Например, третьим элементом этих массивов являются 0 и 2 соответственно, что означает, что arr[0][2]
не равен нулю.
Простой способ сделать результат более «читабельным», как упоминается на странице документации, этотранспонировать это:
np.transpose(np.nonzero(ar1))
'''
array([[0, 0],
[0, 1],
[0, 2],
[0, 5],
[1, 0],
[1, 1],
[1, 2],
[1, 4],
[1, 5]])
'''