2015-05-05 2 views

ответ

4

numpythonic способ сделать это состоит в использовании any/all методы на ndarray объекты непосредственно.

В вашем примере, ваш код спрашивает: есть ли нет индексов, где matrix_a меньше, чем matrix_b?

not (matrix_a < matrix_b).any() 

Эквивалентно, имеет ли matrix_a все элементы, превышающие соответствующие элементы в matrix_b?

(matrix_a >= matrix_b).all() 
+0

Я думаю, что вы в замешательстве - '__builtin __. Any (np.array ([0]))' is false, а также 'np.any (np.array ([0])). Это должно быть правдой. Чтобы увидеть странный краевой случай, рассмотрим, например, «a = нули ((3,4)); b = нули ((3,4)); b [0,0] = 1' – wim

+0

Извините, я действительно запутался. Я ожидал, что 'np.any' будет ложным, который, как я думал, был тем, что вы хотели, и' __builtin __. Any', чтобы быть правдой, что я считал неправильным. Но все равно ложны. – abarnert

3

Для a (10,10) диапазона (100)

In [201]: np.nonzero(a>100) 
Out[201]: (array([], dtype=int32), array([], dtype=int32)) 

nonzero возвращает кортеж, с массивом для каждого измерения. Этот кортеж можно использовать для индексации всех элементов, где условие истинно.

Таким образом, вы можете проверить «пустой» nonzero, посмотрев на длину одного из этих массивов.

len(np.nonzero(a>98)[0])==0 

any на булевой маске появляется проще, хотя в быстрых тестах, это на самом деле медленнее.

np.any(a>98) 

MATLAB 'find' возвращает элементы, которые соответствуют. Обозначение numpy равно a[np.nonzero(a>100)] или с использованием булевой маски непосредственно a[a>100].

Таким образом, моя новая номинация на быстрый isempty(find...)) выглядит так: len(a[...])==0.

+0

Проверка длины первого массива кортежа была моим решением, но это не показалось мне элегантным. Вот почему мой вопрос. Спасибо за тестирование эффективности. – overcomer

+0

В MATLAB есть 'isempty (find())' более элегантный, чем 'any()'? – hpaulj

+0

Конечно, 'any()' очень изящный, я имел в виду 'len (np.nonzero (a> 98) [0])', ... проверяя длину первого массива кортежа, это было решение что я нашел. Я рад, что это более эффективно, потому что у меня много проблем с медлительностью в моем приложении. Поэтому я сохраню это. – overcomer

Смежные вопросы