Понимание ненулевой функции NumPy - PullRequest
23 голосов
/ 28 октября 2011

Я пытаюсь понять функцию nonzero numpy. Ниже приведен пример приложения:

import numpy
arr = numpy.array([[1,0],[1,1]])
arr.nonzero()
--> (array([0, 1, 1]), array([0, 0, 1]))

Я вижу, что, поскольку arr является 2-D, выход nonzero() является 2-кортежем. Однако я не понимаю, почему число индексов в каждом элементе кортежа превышает количество строк / столбцов массива. Я вижу, что

arr[arr.nonzero()]
--> array([1, 1, 1])

Но как ...?

1 Ответ

30 голосов
/ 28 октября 2011

Каждый элемент кортежа содержит один из индексов для каждого ненулевого значения. Следовательно, длина каждого элемента кортежа - это число ненулевых элементов в массиве.

Из вашего примера, индексы ненулевых являются [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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...