Статические методы распределяются между всеми экземплярами класса, разработчики обычно используют статическое ключевое слово с методами утилиты, которые выполняют некоторые общие функции, которые регулярно используются в любом месте приложения.
Если применяются следующие условия, сделайте свой метод статическим:
PS: Стоит упомянуть, что очень сложно или даже (возможно) статический метод, издевательский - это механизм, используемый в модульном тестировании для подделки бизнеса некоторыми методами.
Для получения дополнительной информации проверьте: Статическое ключевое слово в java
nonzero
и argwhere
обе дают вам информацию о том, где в массиве находятся элементы True
. where
работает так же, как nonzero
в форме, которую вы опубликовали, но имеет вторую форму:
np.where(mask,a,b)
, которую можно охарактеризовать как numpy «ufunc» версию условного выражение:
a[i] if mask[i] else b[i]
(с соответствующим трансляцией a
и b
).
Что касается как nonzero
, так и argwhere
, они концептуально отличаются друг от друга. nonzero
структурирован для возврата объекта, который может использоваться для индексирования. Это может быть более легким, чем создание всей булевой маски, если 0 являются разреженными:
mask = a == 0 # entire array of bools
mask = np.nonzero(a)
Теперь вы можете использовать эту маску для индексации других массивов и т. Д. Однако, как бы то ни было, это не очень красиво концептуально выяснить, какие индексы соответствуют 0 элементам. Вот где argwhere
.
Я не могу прокомментировать полезность наличия отдельной функции удобства, которая переносит результат другого, но я могу прокомментировать where
vs nonzero
. В простейшем случае использования where
действительно совпадает с nonzero
.
>>> np.where(np.array([[0,4],[4,0]]))
(array([0, 1]), array([1, 0]))
>>> np.nonzero(np.array([[0,4],[4,0]]))
(array([0, 1]), array([1, 0]))
или
>>> a = np.array([[1, 2],[3, 4]])
>>> np.where(a == 3)
(array([1, 0]),)
>>> np.nonzero(a == 3)
(array([1, 0]),)
where
отличается от nonzero
в если вы хотите выбрать элементы из массива a
, если какое-либо условие True
и из массива b
, когда это условие False
.
>>> a = np.array([[6, 4],[0, -3]])
>>> b = np.array([[100, 200], [300, 400]])
>>> np.where(a > 0, a, b)
array([[6, 4], [300, 400]])
Опять же, я не могу объясните, почему они добавили функциональность nonzero
к where
, но это по крайней мере объясняет, как эти два разных.
EDIT: Исправлен первый пример ... моя логика была некорректной ранее
np.nonzero(a)
возвращает кортеж, поэтомуmask.T
не разрешен.mask[:,0]
аналогичным образом не работает. – Sam 15 April 2013 в 01:24np.argnonzero
приятно получить индексы, которые не равны нулю. – mgilson 15 April 2013 в 02:43nonzero
. – user2357112 29 October 2016 в 02:45n
элементы (гдеn
- размер сплющенного массива, который индексируется). Также не купите в пример слишком много. Что, если у вас уже есть подходящий массивmask
, сидящий вокруг? – mgilson 29 October 2016 в 02:51