Ответ 1
Каждый элемент кортежа содержит один из индексов для каждого ненулевого значения. Следовательно, длина каждого элемента кортежа - это количество ненулевых элементов в массиве.
В вашем примере индексы ненулевых значений [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])