Элементарно больше, чем с тремя или более списками - PullRequest
2 голосов
/ 23 февраля 2020

На основе следующих списков

l1 = [1,2,3]
l2 = [2,3,4]
l3 = [3,4,2]

Я хочу сделать поэлементно большее сравнение, чтобы значение истинности в результирующем массиве было только истинным, если соответствующий элемент в первом массиве больше, чем элемент во 2-м массиве и элемент во 2-м массиве больше, чем элемент в 3-м массиве.

т.е.

print(elementwise_greather_than(l3,l2,l1))
[True,True,False]
print(elementwise_greather_than(l2,l1,l3))
[False,False,True]
print(elementwise_greather_than(l1,l3,l2))
[False,False,False]
...

numpy * np.greater только кажется, работать с двумя списками

import numpy as np
print(np.greater(l1,l3))
[False False  True]

, но не с 3:

print(np.greater(l1,l3,l2))
TypeError: return arrays must be of ArrayType

Так, как я могу сделать это сравнение, предполагая списки равной длины?

Ответы [ 4 ]

2 голосов
/ 23 февраля 2020

Попробуйте numpy.logical_and:

numpy.logical_and(np.greater(l1,l2), np.greater(l2,l3))
1 голос
/ 23 февраля 2020

Это будет обобщенная версия для любого числа входных массивов с numpy:

import numpy as np

def elementwise_greater_than(*lsts):
    return ((-np.diff(np.vstack(lsts), axis=0)).min(axis=0)>0)

Выходы:

print(elementwise_greater_than(l3,l2,l1))
#[True True False]
print(elementwise_greater_than(l2,l1,l3))
#[False False True]
print(elementwise_greater_than(l1,l3,l2))
#[False False False]
1 голос
/ 23 февраля 2020

Попробуйте, это работает для n списков одинаковой длины, где n > 1:

l1 = [1,2,3]
l2 = [2,3,4]
l3 = [3,4,2]

def ewg(*args):
    "computes element wise greater than for more than one lists"
    result = [sorted(elems, reverse=True) == list(elems) for elems in zip(*args)]
    return result

ewg(l3,l2,l1)

Вывод:

[True, True, False]
>>> l4 = [10, 0, 10]
>>> ewg(l4, l3, l2, l1)
[True, False, False]
1 голос
/ 23 февраля 2020

Принимая списки равной длины

def elementwise_greather_than(a,b,c):
    return [x > y > z for x,y,z in zip(a,b,c)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...