2016-06-27 5 views
3

Я не мог найти простой способ сравнить два (многомерных в моем случае) массивов в лексикографическом ключе.Лексикографическое сравнение двух numpy ndarrays

Т.е.

a = [1,2,3,4] 
b = [4,0,1,6] 

Для a < b Я хочу получить true, где я получаю [true, false, false, true]
Для a > b Я хочу, чтобы получить false где я получаю [false, true, true, false]

+0

Как получается окончательное истинное/ложное? –

+0

@MosesKoledoye: [Лексикографическое сравнение] (https://en.wikipedia.org/wiki/Lexicographic_order), сравниваются списки и кортежи. – user2357112

+0

лексикографически. то есть. если первое число отличается, массив с большими выигрышами. если они одинаковы, сравнение идет на 2. etc. –

ответ

2

Если вопрос только о том, будет ли a равен < или >, чем b, тогда должно работать следующее.

def fn(a, b): 
    # finds index of the first non matching element 
    idx = np.where((a>b) != (a<b))[0][0] 

    if a[idx] < b[idx]: print "a < b" 
    if a[idx] > b[idx]: print "a > b" 
+0

Я отредактировал ваш ответ, чтобы удалить '== True', что подразумевается (и медленно запускается), и называть'^'как'! = 'Для ясности – Eric

+1

Предположительно, вы используете' (a> b)! = (a Eric

0

Multiply с np.arange (4) [:: - 1] * * 2 и затем суммировать по этой оси.

+0

Можете ли вы привести пример, пожалуйста? – AkiRoss

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