Каждый элемент кортежа содержит один из индексов для каждого ненулевого значения. Следовательно, длина каждого элемента кортежа - это число ненулевых элементов в массиве.
Из вашего примера, индексы ненулевых являются [0, 0]
, [1, 0]
и [1, 1]
. Первый элемент кортежа является первым индексом для каждого из ненулевых значений: ([0, 1, 1])
, а второй элемент кортежа является вторым индексом для каждого из ненулевых значений: ([0, 0, 1])
.
Ваш второй кодовый блок просто возвращает ненулевые значения массива (мне не ясно из вопроса, является ли возвращаемое значение частью путаницы).
>>> arr[arr.nonzero()]
array([1, 1, 1])
Это будет более понятно, если мы используем пример массива с другими значениями.
>>> arr = numpy.array([[1,0],[2,3]])
>>> arr[arr.nonzero()]
array([1, 2, 3])