Имея следующую матрицу расстояний dist
:
dist = [[[ 0, 0],
[ 5, 0],
[ 1, 0],
[ 1, 1],
[11, 3],
[ 3, 6],
[ 5, 5]],
[[ 5, 0],
[ 0, 0],
[ 6, 0],
[ 4, 1],
[ 6, 3],
[ 2, 6],
[10, 5]],
[[ 1, 0],
[ 6, 0],
[ 0, 0],
[ 2, 1],
[12, 3],
[ 4, 6],
[ 4, 5]],
[[ 1, 1],
[ 4, 1],
[ 2, 1],
[ 0, 0],
[10, 2],
[ 2, 7],
[ 6, 6]],
[[11, 3],
[ 6, 3],
[12, 3],
[10, 2],
[ 0, 0],
[ 8, 9],
[16, 8]],
[[ 3, 6],
[ 2, 6],
[ 4, 6],
[ 2, 7],
[ 8, 9],
[ 0, 0],
[ 8, 1]],
[[ 5, 5],
[10, 5],
[ 4, 5],
[ 6, 6],
[16, 8],
[ 8, 1],
[ 0, 0]]]
Мне нужно построить generator expression
с AND
условиями, подобными этим:
gexp = (dist[:, :, 0] <= 1) & (dist[:, :, 1] <= 2)
означает, что я хочузначение True
, когда выполняются оба условия (для столбцов 0 и 1), как показано ниже (я напечатал его, переходя к синтаксису понимания списка):
[array([[ True, False, True, True, False, False, False],
[False, True, False, False, False, False, False],
[ True, False, True, False, False, False, False],
[ True, False, False, True, False, False, False],
[False, False, False, False, True, False, False],
[False, False, False, False, False, True, False],
[False, False, False, False, False, False, True]])]
У меня есть этот список столбцов:
columns = ['weight', 'height']
их пороги:
thresholds = {'weight': 1.0, 'height': 1.0}
и соответствующие им индексы:
indexes = {'weight': 0, 'height': 1}
Я пытаюсь построить выражение своего генератора следующим образом:
dynamic_gexpr = [dist[:,:,indexes.get(column)] <= thresholds.get(column) for column in columns]
но я не знаю, как добавить условия И между одним столбцом и другим.Вышеупомянутое выражение, кажется, обрабатывает его так, как если бы они были больше похожи на условия ИЛИ, давая следующий вывод:
[array([[ True, False, True, True, False, False, False],
[False, True, False, False, False, False, False],
[ True, False, True, False, False, False, False],
[ True, False, False, True, False, False, False],
[False, False, False, False, True, False, False],
[False, False, False, False, False, True, False],
[False, False, False, False, False, False, True]]), array([[ True, True, True, True, False, False, False],
[ True, True, True, True, False, False, False],
[ True, True, True, True, False, False, False],
[ True, True, True, True, False, False, False],
[False, False, False, False, True, False, False],
[False, False, False, False, False, True, True],
[False, False, False, False, False, True, True]])]